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

推荐订阅源

V2EX - 技术
V2EX - 技术
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
S
Securelist
P
Privacy & Cybersecurity Law Blog
Scott Helme
Scott Helme
T
Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
量子位
博客园 - Franky
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
T
Troy Hunt's Blog
N
News | PayPal Newsroom
Google Online Security Blog
Google Online Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
N
Netflix TechBlog - Medium
小众软件
小众软件
P
Palo Alto Networks Blog
Spread Privacy
Spread Privacy
C
Cyber Attacks, Cyber Crime and Cyber Security
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
L
Lohrmann on Cybersecurity
L
LINUX DO - 最新话题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Last Watchdog
The Last Watchdog
S
Security @ Cisco Blogs
P
Privacy International News Feed
Last Week in AI
Last Week in AI
Microsoft Security Blog
Microsoft Security Blog
T
Tailwind CSS Blog
博客园_首页
云风的 BLOG
云风的 BLOG
V
Vulnerabilities – Threatpost
D
DataBreaches.Net
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
罗磊的独立博客
Engineering at Meta
Engineering at Meta
Forbes - Security
Forbes - Security
T
Tenable Blog

开飞机的老张

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