ES6之Symbol

来源:互联网 发布:蛇精吐火的软件 编辑:程序博客网 时间:2024/06/11 01:50

作用

表示独一无二的值。

举个栗子:

let a1 = Symbol();let a2 = Symbol();console.log(a1===a2);   //false

用Symbol声明的两个变量绝对不相等!

那么问题来了,如果我们希望重用一个Symbol值怎么办?

Symbol.for()

    let a1 = Symbol.for('foo');    let a2 = Symbol.for('foo');    console.log(a1===a2);   //true

如何获取Symbol值呢?

这里要注意,for…of、for…in 是取不到symbol值的

    let a1 = Symbol.for('abc');    let obj={        [a1]:'123',        'abc':345,        'c':456    };    console.log('obj',obj);      for(let [key,value] of Object.entries(obj)){        console.log('let of',key,value);       }     Object.getOwnPropertySymbols(obj).forEach(function(item){        console.log(obj[item]);    })

执行结果

由此可见:for…of…方法只能返回 非 Symbol 类型;Object.getOwnPropertySymbols()接口只能返回 Symbol 类型。

有什么办法可以同时返回普通类型+Symbol类型呢?

用 Reflect 方法

  Reflect.ownKeys(obj).forEach(function(item){    console.log('ownkeys',item,obj[item]);  })

执行结果

原创粉丝点击