es6——js第7种数据类型symbol和es10新增属性description
作者:互联网
文章结构
创建symbol的方式
获取symbol的描述信息
注意事项
不能与其他数据类型进行运算
值是唯一的?分情况!
不能用for-in遍历
可以使用Reflect.ownkeys来获取定义的对象的所有键名,从而来遍历对象
应用场景
创建symbol方式
1 let s = Symbol(); 2 console.log(s,typeof s);//Symbol() 'symbol' 3 4 //传递一个字符串表示名,实际上s1和s2还是随机的,唯一的 5 let s1 = Symbol('zhangsan'); 6 let s2 = Symbol('zhangsqan'); 7 console.log(s1 === s2);//false 8 //第二种symbol.for创建们可以通过后面的标识符查询到,可以与后面的标识符一一对应 9 let s3 = Symbol.for('zhangsan'); 10 let s4 = Symbol.for('zhangsan'); 11 console.log(s3 === s4);//true
获取symbol的描述信息
1 let s = Symbol('zhangsan'); 2 console.log(s.description); // zhangsan
注意事项
不能与其他数据类型进行运算
1 let s5 = Symbol.for('1'); 2 s5 = s5 + 1;// Cannot convert a Symbol value to a number
值是唯一的?分情况!
1 let s1 = Symbol('zhangsan'); 2 let s2 = Symbol('zhangsan'); 3 let s3 = Symbol.for('zhangsan'); 4 let s4 = Symbol.for('zhangsan'); 5 /* 和 Symbol() 不同的是,用 Symbol.for() 方法创建的的 6 symbol 会被放入一个全局 symbol 注册表中。Symbol.for() 7 并不是每次都会创建一个新的 symbol,它会首先检查给定的 8 key 是否已经在注册表中了。假如是,则会直接返回上次存储 9 的那个。否则,它会再新建一个。 */ 10 console.log(s1 === s2); // false 11 console.log(s3 === s4); // true
不能用for-in遍历
1 let obj = {}; 2 obj[Symbol("1")] = 1; 3 obj[Symbol("2")] = 2; 4 for (const key in obj) { 5 if (Object.hasOwnProperty.call(obj, key)) { 6 console.log(key); // 无输出,遍历不到 7 const element = obj[key]; 8 console.log(element); // 无输出,遍历不到 9 } 10 }
可以使用Reflect.ownKeys来获取定义的对象的所有键名,从而来遍历对象
1 let obj = {}; 2 obj[Symbol("1")] = 1; 3 obj[Symbol("2")] = 2; 4 obj.a = 3; 5 const result = Reflect.ownKeys(obj); 6 console.log(result); // [ 'a', Symbol(1), Symbol(2) ] 7 for (const index of result) { 8 console.log(obj[index]); // 3 1 2 9 }
应用场景
1 // 当我们需要向一个对象中添加方法时,如果我们不知道对象内部是怎么样的,如果直接添加可能会有命名冲突 2 let obj = { 3 up() { 4 console.log("xiangshang"); 5 }, 6 down() { 7 console.log("xiangxia"); 8 }, 9 }; 10 11 let symobj = { 12 up: Symbol(), 13 down: Symbol(), 14 }; 15 16 obj[symobj.up] = function() { 17 console.log("我是新添加的up方法"); 18 }; 19 20 obj[symobj.down] = function() { 21 console.log("我是新添加的down方法"); 22 }; 23 24 console.log(obj); 25 /* { 26 up: [Function: up], 27 down: [Function: down], 28 [Symbol()]: [Function (anonymous)], 29 [Symbol()]: [Function (anonymous)] 30 } */ 31 obj[symobj.down](); // 我是新添加的down方法
标签:es6,obj,description,Symbol,数据类型,let,console,symbol,log 来源: https://www.cnblogs.com/lzx-cm/p/16628256.html