• 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
  • 相关阅读:
    WinCE 测试网速
    YII 关联表查询
    YII CMenu配置
    php扩展开发笔记1
    使用Mysql EXPLAIN分析、优化SQL语句
    使用Mysql EXPLAIN分析、优化SQL语句 (续)
    jquery提交中文导致乱码
    *nix 命令记(持续更新)
    php 函数中使用static
    xmlhttprequest获取TransferEncoding:chunked分时编码输出
  • 原文地址:https://www.cnblogs.com/shun1015/p/15667163.html
Copyright © 2020-2023  润新知