ES6新增Symbol类型

我们经常要用到使用唯一性变量的场景,以前都自己封装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总篇--目录

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容