es6的Symbol数据类型

  • ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,前六种是:Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)
  • Symbol值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的Symbol类型。凡是属性名属于Symbol类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。
  • 注意,Symbol函数前不能使用new命令,否则会报错。这是因为生成的Symbol是一个原始类型的值,不是对象。也就是说,由于Symbol值不是对象,所以不能添加属性。基本上,它是一种类似于字符串的数据类型。

  Symbol函数可以接受一个字符串作为参数,表示对Symbol实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。

  • 由于每一个Symbol值都是不相等的,这意味着Symbol值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖。Symbol值作为对象属性名时,不能用点运算符。在对象的内部,使用Symbol值定义属性时,Symbol值必须放在方括号之中。
 1   //  Symbol: es6新增数据类型,表示独一无二的值
 2   // 解决问题: 如果添加的对象属性名重复,解决属性名重复
 3   var obj = { name: 'xixi', age: 13, name: 'dfs' }
 4   console.log(obj)  // {age: 13, name: 'dfs'}
 5 
 6   //声明的方式
 7   let s = Symbol()
 8   let s1 = Symbol()
 9   console.log(s == s1) //false
10 
11   let s2 = Symbol('s2') // 's2' 参数表示描述信息, 没啥用
12 
13   // 实际运用
14   var id = Symbol()
15   var obj1 = { id: 1, [id]: 100 } // 该对象重复定义id时,
16   console.log(obj1)  //{id: 1, Symbol(): 100}, 相当于改对象有两个id属性
17   console.log(obj1[id]) // 100  只能通过中括号形式来获取,不能使用扩展运算符...
18   //注意  在我们使用 for in 或者 Object.keys 来获取属性是,是不能获取到 Symbol添加的这个属性的
19   for (var i in obj1) {
20     console.log(i)  //id,  
21   }
22   console.log(Object.keys(obj1)) // id

 

posted @ 2021-12-09 14:28  顺·  阅读(231)  评论(0编辑  收藏  举报