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

推荐订阅源

S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
博客园 - 【当耐特】
月光博客
月光博客
Vercel News
Vercel News
D
Docker
I
InfoQ
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
GbyAI
GbyAI
有赞技术团队
有赞技术团队
雷峰网
雷峰网
博客园 - 聂微东
小众软件
小众软件
Y
Y Combinator Blog
腾讯CDC
L
LangChain Blog
The GitHub Blog
The GitHub Blog
宝玉的分享
宝玉的分享
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
T
The Blog of Author Tim Ferriss

开飞机的老张

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仓库点个星支持我们吧!