其他分享
首页 > 其他分享> > es6——js第7种数据类型symbol和es10新增属性description

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