当前位置: 移动技术网 > IT编程>开发语言>JavaScript > ES6新特性之Symbol类型用法分析

ES6新特性之Symbol类型用法分析

2019年03月20日  | 移动技术网IT编程  | 我要评论

新婉君,长江水世界好玩吗,金毛寻回

本文实例讲述了es6新特性之symbol类型用法。分享给大家供大家参考,具体如下:

symbol类型

1. 为了避免属性名的冲突,es6新增了symbol类型。symbol可以产生一个独一无二的值

let s1 = symbol('a');
let s2 = symbol('a');
console.log(s1); //symbol(a)
console.log(typeof s1); //symbol
console.log(s1 == s2); //false

2.symbol用于属性名

var s1 = symbol();
var s2 = symbol();
var s3 = symbol();
var obj = {
  [s1]: 'hi'
};
obj[s2] = 'es6';
object.defineproperty(obj, s3, {
  value: 'es2015'
});
console.log(obj); //object {symbol(): "hi", symbol(): "es6", symbol(): "es2015"}
console.log(obj.s1); //undefined -> 所以当用symbol作为属性名时候,不能用.运算符访问属性
console.log(obj[s1]); //hi
console.log(obj['s1']); //undefined

注意:symbol作为属性名,该属性不会出现在 for...in...和 for...of... 循环中,也不会被 object.keys(), object.getownpropertynames() 返回。object.getownproertysymbols()返回一个数组,成员是当前对象的所有用作属性名的symbol值。

2. symbol.for() 接受一个字符串作为参数,然后搜索有没有以该参数作为名称的symbol值,有就返回这个symbol值,否则就新建并返回一个以该字符串为名称的symbol值

3. symbol.keyfor()方法返回一个已经登记的symbol类型值的key

symbol()方法生成一个symbol类型时,没有登记,所以每次调用symbol(哪怕传入相同的字符串)会返回不同的symbol,但是symbol.for()在生成symbol时候进行了登记,每次再次调用时,都会先寻找是否有传入相同参数的symbol,故只有symbol.for()产生的symbol才能被symbol.keyfor()找到。

let s1 = symbol('a');
let s2 = symbol('a');
let s3 = symbol.for('b');
let s4 = symbol.for('b');
let name1 = symbol.keyfor(s1);
let name3 = symbol.keyfor(s3);
console.log(s1 == s2); //false
console.log(s1 == s3); //false
console.log(s2 == s3); //false
console.log(s3 == s4); //true
console.log(name1); //undefined
console.log(name3); //b

希望本文所述对大家ecmascript程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网