• ES6新增数据类型Symbol


    Symbol的含义?

    ES6(2015) 引入了第七种原始数据类型SymbolSymbol英文文意思为 符号、象征、标记、记号,在 js 中更确切的翻译应该为独一无二

      Symbol的使用?

    Symbol 值通过Symbol函数生成,这里需要注意Symbol函数前不能使用new命令,切记,切记,切记
    let sym = Symbol()



    1、接受一个字符串类型的参数
    let a = Symbol("name")

    a // Symbol(name)

    a.toString() // "Symbol(name)" 



    2、有无参数做对比

    ①有参数

    let a1 = Symbol("name")
    let a2 = Symbol("name")

    a1 === a2 //false

    可以看出a1,a2是Symbol的返回值并且参数相同但它们是不相等的。

    ②无参数

    let a1 = Symbol()
    let a2 = Symbol()

    a1 === a2 //false

    可以看出a1,a2是Symbol的返回值,但它们是不相等的。

     

    3、不能与其他的数据类型进行运算

    let s = Symbol("Hi Symbol")

    s + "welcome your visit"

    此时浏览器会报错 TypeError: can't convert symbol to string 意思是将Symbol 值不能与其他类型的值进行运算

     

    4.显式转为字符串

    let s = Symbol("Hello word")

    第一种 String(s) //'Symbol("Hello word")'

    第二种 s.toString() //'Symbol("Hello word")'

     

    5.转布尔类型

    let s = Symbol()

    Boolean(s) // true

    !s //false 

     

    6.Symbol.prototype.description

    此语法是为刚创建好的Symbol语法添加一个描述。

    const s = Symbol("Hello Word")

    读取描述:s.description // "Hello Word"

     

    7.可以当属性名来使用(它的独一无二性质,可以防止键名被改写或覆盖)

    let s = Symbol()

    //第一种方式

    let obj = {}

    obj[s] = 'Hello Word';

    //第二种方式

    let obj = {

      [s]:'Hello Word'

    }

    //第三种方式

    let obj = {}

    Object.defineProperty(obj,s,{value:"Hello Word"})

    obj[s] // "Hello Word"

    8.Symbol.for() Symbol.keyFor()

     

     let a1 = Symbol.for("name")

     let a2 = Symbol.for("name")

     a1 === a2 //true

     两个相等的原因是Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,是会先检查给定的key是否已经存在,如果不存在才会新建一个值。

     

    Symbol.keyFor()方法返回一个已登记的 Symbol 类型值的key

    let a1 = Symbol.for("name");
    Symbol.keyFor(s1) // "name"
    
    let a2 = Symbol("name");
    Symbol.keyFor(s2) // undefined
  • 相关阅读:
    Java 对象的序列化和反序列化
    Java 数组元素倒序的三种方式
    Java实现字符串倒序输出的几种方法
    sql ,内连接,外连接,自然连接等各种连接
    linux上 安装软件
    打乱数组
    java集合类
    我换了新博客啦
    代理模式
    抽象工厂模式
  • 原文地址:https://www.cnblogs.com/yzy521/p/14131599.html
Copyright © 2020-2023  润新知