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) ]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值