ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#ES6 新增数据类型 Symbol > 基本数据类型有 6 种:Undefined、Null、Boolean、String、Number、Object,ES6 新增 Symbol 类型, 表示独一无二的值(英文释义:象征;符号;标志),Symbol 是一种特殊的、不可变的数据类型,可以作为对象属性的标识符使用 > Symbol 类型出现的原因:是由于 es6 以前对象的 key 也就是属性名是都是以字符串定义,为避免属性名与第三方库或者某个不知名标准引发冲突所新增 --- > Case: 1). Symbol类型数据不可以和其他类型数据进行运算! 2). 不可以通过for in,for of,Object.keys/values检索Symbol属性或值,只能通过Object.getOwnPropertySymbols(),Reflect.ownKeys检索,前者检索所有属性,后者仅检索Symbol属性。 3). 取对象内Symbol类型属性时, 切记不可使用.的方式,这时取到的是字符串,而非Symbol属性 - Symbol 声明方式 - ```javascript /* 不可以使用new 关键字去声明, Symbol函数直接声明 */ let a = Symbol(); /* Symbol() */ let b = Symbol('description'); /* Symbol('description') 这是的字符串至关重要,用于描述该Symbol值作用,最好语义化,便于阅读 */ let c = Symbol({ c: 1 }); /* Symbol([object Object]) */ let c = Symbol.for() //传入参数为该Symbol在注册表中的键,如果已有则直接获取,并返回该键的值,如未有则创建并返回。 let c = Symbol.keyFor() //返回 通过 Symbol.for() 所注册 Symbol键,并返回如果未有,则返回undefined ``` - Symbol 使用场景 - ```javascript let s = Symbol.for("clouds"); console.log(Symbol.keyFor(s)); //返回 键 let ss = Symbol("clouds"); console.log(Symbol.keyFor(ss)); //非 for 注册, 返回undefined let private = Symbol(); function Public() { this[private] = 'is my own'; this.private = 'is anoher own'; } let my = new Public(); console.log(my[private], my.private); /* is my own,is anoher own */ ```