ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] >[success] # 创建Symbol <br/> ~~~ 在 JS 已有的基本类型('字符串'、'数值'、'布尔类型'、'null'与'undefined')之外, 'ES6'引入了一种 新的'基本类型':'Symbol'(符号)。 Symbol 起初被设计用于'创建对象私有成员',而这也是 JS 开发者期待 已久的特性。在'Symbol'诞生之前,将'字符串作为属性名称导致属性可以被轻易访问',无论命名规则如何。而 '私有属性'意味着开发者'可以创建非字符串类型的属性名称',由此可以防止使用常规手段来探查这些名称。 ~~~ ~~~ // 创建私有属性 let firstName = Symbol() // 创建对象 let person = {} // 赋值私有属性 person[firstName] = "Nicholas" console.log(person[firstName]) // "Nicholas" console.log(person) // {Symbol():"Nicholas"} console.log(person[Symbol()]) // undefined 或者这样写: // 创建私有属性 let firstName = Symbol() let person = { [firstName]: 'Nicholas' } console.log(person[firstName]) // "Nicholas" ~~~ <br/> >[success] ## 带参数的Symbol ~~~ 'Symbol'函数还可以接受一个额外的'参数'用于'描述Symbol',该描述并'不能用来访问对应属性', 但它能 用于调试,例如: ~~~ ~~~ let firstName = Symbol("first name") let person = {} person[firstName] = "Nicholas" // 用in运算符判断first name是否为person对象中的属性 console.log("first name" in person) // false console.log(person[firstName]) // "Nicholas" console.log(firstName) // "Symbol(first name)" ~~~ <br/> >[success] ## 识别Symbol ~~~ 由于'Symbol'是'基本类型'的值,因此你可以使用'typeof'运算符来判断一个变量是否为'Symbol'。 'ES6'扩充了'typeof'的功能以便让它在作用于'Symbol'的时候能够返回'symbol', 例如: ~~~ ~~~ let symbol = Symbol("test symbol") console.log(typeof symbol) // "symbol" ~~~ 尽管有其他方法可以判断一个变量是否为`Symbol`, `typeof`运算符依然是最准确、最优先的判别手段。 >[warning] ## 注意 ~~~ 1. 由于'Symbol'是'基本类型值',因此调用'new Symbol()'将会抛出错误。你可以通过'newObject(Symbol)' 来创建一个'Sybol实例',但尚不清楚这能有什么作用。 ~~~