ES6 Symbol

ES6引入了一种新的原始数据类型Symbol,用于表示独一无二的值,最常用的方式是用来定义对象的唯一属性名。

  • Symbol("description")可以接收一个字符串作为参数,用来为新建的Symbol提供描述。
let symbol = Symbol("desc");
  • Symbol()函数栈不能使用new命令,因为Symbol本身是JS的原始数据类型,因此它并不是对象。
let symbol = Symbol("desc");
console.log(symbol);//Symbol(desc)
console.log(typeof(symbol));//'symbol'
  • Symbol("description")每次生成的值都是不相等的
let symbol1 = Symbol("desc");
let symbol2 = Symbol("desc");
console.log(symbol1 == symbol2);//false
console.log(symbol1 === symbol2);//false
  • Symbol作为对象的属性名,可以保证不重名。
let symbol = Symbol("desc");

let obj = {};
obj[symbol] = "description";

console.log(obj);//{ [Symbol(desc)]: 'description' }
  • Symbol作为对象属性名时不能用运算符,要使用方括号[]。因为运算符后是字符串,所以获取的是字符串的属性,而不是Symbol值得属性。
let symbol = Symbol("desc");
let obj = {
    [symbol]:"description"
};
console.log(obj);//{ [Symbol(desc)]: 'description' }
  • Symbol作为属性名时,属性是公有的而非私有的,因此在类的外部可以直接访问。
let symbol = Symbol("desc");
let obj = {
    [symbol]:"description"
};
console.log(obj[symbol]);//description
  • 若要获取对象的Symbol属性,可使用Object.getOwnPropertySymbol()方法和Reflect.ownKeys()方法得到。
let symbol = Symbol("desc");
let obj = {
    [symbol]:"description"
};
for(let item in obj){
    console.log(item);//nothing
}
console.log(Object.keys(obj));//[]
console.log(Object.getOwnPropertySymbols(obj));//[ Symbol(desc) ]
console.log(Reflect.ownKeys(obj));//[ Symbol(desc) ]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 欢迎访问我的博客https://qqqww.com/,祝码农同胞们早日走上人生巅峰,迎娶白富美~~~ 1 引入Sy...
    这里王工头阅读 3,757评论 0 0
  • 1.简介 Symbol数据类型,用来表示独一无二的值,主要是用来在为对象添加新的属性时,防止属性名的冲突。Symb...
    星月西阅读 5,033评论 0 0
  • Symbol是Es6中的一个新特性,它是一个基本数据类型。 javascript从Es6起,基本数据类型变为6种 ...
    秦声阅读 4,032评论 1 9
  • 概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加...
    oWSQo阅读 3,517评论 1 3
  • 很多人都说,在感情里,安全感是自己给的。只要有了经济独立的实力,就不会在爱情里没有安全感了。 我不同意。 感情里的...
    狐狸少女阅读 4,496评论 0 2

友情链接更多精彩内容