ES6新特性:增加新类型:Symbol

ES6新特性:增加新类型:Symbol

ES6新增了一种数据类型:Symbol,Symbol是用来定义对象的唯一属性名的不二之选;
Symbol如何使用呢, Symbol不是一个构造函数哦, 如果用new Symbol的话, 会报错的:

运行下面代码

var sym1 = Symbol();
var sym2 = Symbol("foo");
var sym3 = Symbol("foo");
console.log(sym1, sym2, sym3) //输出Symbol() Symbol(foo) Symbol(foo)

连自己都不等于自己:

//用同样的参数创建两次, 也是不相等的:
Symbol("foo") === Symbol("foo"); //输出:false

作为属性名的Symbol;使用Symbol给对象添加唯一的属性, Symbol也能作为对象的函数名;

let obj = {};
let sAttr0 = Symbol("hehe");
let sAttr1 = Symbol("meme");
obj[sAttr1] = 1;
console.log(obj[sAttr1]);

obj[sAttr0] = () => {
    return ++obj[sAttr0];;
};

我们可以用typeof判断某一个变量类型为Symbol类型:

运行下面代码

typeof Symbol() === 'symbol' //输出:true
typeof Symbol('foo') === 'symbol' //输出: true
typeof Symbol.iterator === 'symbol' //输出 : true

如果我们不知道Symbol的实例名字是什么,我们怎么获取到Symbol值的呢, Symbol无法被for in , for of循环,以及Object.keys, Object.values 等都无法遍历到Symbol的属性; Object下给我们提供了一个getOwnPropertySymbols;

let sym0 = Symbol("o_o?");
let obj = {
    [sym0] : "heheda"
}
for( let prop of Object.getOwnPropertySymbols(obj) ) {
    //prop就是Symbol的名字
    console.log( obj[prop] ); //输出:heheda
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值