美文网首页
ES6新增Symbol类型

ES6新增Symbol类型

作者: 易路先登 | 来源:发表于2019-06-19 08:40 被阅读0次

我们经常要用到使用唯一性变量的场景,以前都自己封装UUID了之类的函数来得到,ES6专门提供了一种数据类型Symbol来提供唯一性的值;

1 使用Symbol()函数获取Symbol变量
let a = Symbol();
console.log(typeof a);//symbol
let b = Symbol();
console.log(a==b,a===b);//false false

注意:Symbol() S虽然大写,但这只是个函数,获取Symbol变量时并未使用new关键字

2 使用Symbol.for(arg)在Symbol变量中混入自定义值
let a = Symbol.for('my');
let b = Symbol.for('my');
console.log(a==b,a===b);//true true

注意:不要因为a和b相等判断为true就认为这个值不是唯一性值了,而是因为Symbol.for(arg)函数会检测有没有与arg相关的Symbol类型,如果有就返回,如果没有才新建。所以上述代码中a和b本来就是指向了一个Symbol变量,当然相等了。

3 遍历Symbol属性,有对象如下
let a = Symbol.for('my');
let obj = {
  [a]:'qiang',
  age:18
}
  • 使用let of遍历该对象是拿不到Symbol属性的。
for(let [key,value] of Object.entries(obj)){
    console.log(key,value);
}
//age 18
  • 使用Object.getOwnPropertySymbol(obj)可得到一个包含该对象所有Symbol类型属性的数组
Object.getOwnPropertySymbols(obj).forEach(function(item){
  console.log(item,obj[item]);
})
//Symbol('my') qiang
  • 使用Reflect.ownKeys(obj)可得到一个包含该对象所有属性的数组
Reflect.ownKeys(obj).forEach(function(item){
  console.log(item,obj[item]);
})
//age 18
//Symbol('my') qiang

ES6总篇--目录

相关文章

网友评论

      本文标题:ES6新增Symbol类型

      本文链接:https://www.haomeiwen.com/subject/mpncqctx.html