zoukankan      html  css  js  c++  java
  • 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

     

     

     

  • 相关阅读:
    转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
    TYVJ P1081 最近距离 Label:这不是分治!!!
    TYVJ P1086 Elevator Label:dp
    数字图像处理的三个层次
    栅格化是什么意思?
    图像基本知识
    修改了天空盒子但是点play还是没变原因
    地形编辑
    Bmp8位图像亮度如何调整?
    bmp图像作业笔记
  • 原文地址:https://www.cnblogs.com/LcxWeb/p/14122657.html
Copyright © 2011-2022 走看看