惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
L
LangChain Blog
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
D
Docker
B
Blog
Engineering at Meta
Engineering at Meta
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
I
InfoQ
G
Google Developers Blog
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42

开飞机的老张

AGENTS.md Openspec 使用心得 从树莓派内网穿透到 Cloudflare Pages Openclaw和博客 郊眠寺 采石 译:我为什么使用Map(和WeakMap)处理DOM节点 原生JavaScript获取URL参数 字符串首字母大写 用forEach()遍历对象 JavaScript禁用按钮 JavaScript的FormData JavaScript的Blob 用FileReader读取本地文件 JavaScript的Thenable JavaScript中Promise的reject JavaScript的立即调用函数表达式(IIFE) JavaScript的Promise链 用interact.js实现拖拽、缩放、吸附
介绍JavaScript中Symbol
kaifeiji.cc · 2023-07-27 · via 开飞机的老张

原文:An Introduction to Symbols in JavaScript

Symbol提供了一种在对象中创建隐藏属性的方式。

Symbolnumberbooleannull一样,是JavaScript中一种原始数据类型,常被用于避免属性名冲突或模拟对象私有属性。

调用全局函数Symbol()可以创建一个Symbol:

1
const sym = Symbol();

Symbol()函数接收一个字符串参数description,在打印Symbol时会显示出来。

1
2
3
const sym = Symbol('my description');

console.log(sym);

主要特性

Symbol有两个主要特性。其一是任意两个Symbol都不相等,即使有相同的description参数,也不相等。

1
2
3
Symbol() === Symbol(); 

Symbol('test') === Symbol('test');

其二是对象的属性名可以用Symbol。通常,对象的属性名要么是Symbol要么是字符串。

1
2
3
4
5
6
7
8
const test = Symbol('test');

const obj = {};
obj.test = 'hello';
obj[test] = 'world';

obj.test;
obj[test];

由于两个Symbol必然不相等,那么除非可以访问到Symbol,否则一段代码是无法访问Symbol所代表的属性的。这样,用Symbol可以很方便的创建隐藏属性,只能在特定的函数中进行访问。

1
2
3
4
5
6
7
8
9
function addSymbol(obj) {
const sym = Symbol('test');
obj[sym] = 'my hidden value';

return obj;
}

const obj = addSymbol({});

Symbol在JSON.stringify()的输出中也会被排除掉,非常适合存储只在编码过程中需要用到,而终端用户不会看到信息。

本教程对您有帮助吗?来GitHub仓库点个星支持我们吧!