zoukankan      html  css  js  c++  java
  • es6(四):Symbol,Set,Map

    1.Symbol:

    Symbol中文意思“象征”

    Symbol:这是一种新的原始类型的值,表示独一无二的值(可以保证不与其它属性名冲突)
    Symbol()函数前面不能使用new,因为生成的Symbol(下面指s)是一个原始类型的值,不是对象
    1 let s=Symbol()
    2     console.log(typeof s)//symbol
     
    Symbol可以接受一个字符串作为参数,作为对Symbol的描述
    1 let s1=Symbol('s1')
    2     let s2=Symbol('s1')
    3     //Symbol是独一无二的值,所以进行比较返回的永远是false
    4     console.log(s1===s2)
    Symbol的主要运用场景之一对象属性名不会产生覆盖
    1 let name1=Symbol()
    2     let obj={
    3       name1:'apple',//此处name1是字符串
    4       [name1]:'blue'//Symbol的name1在对象中必须用中括号括起来,否则被认为是字符串
    5     }
    6     console.log(obj.name1,obj['name1'],obj[name1])//前面两种是获取apple写法,后面是获取Symbol(即blue)的写法

    2.Set:新的数据结构,类似数组,但是成员的值是唯一的(所以可以用来去重)

    Set本身是一个构造函数
     1 console.log(new Set([1,2,3,2,3]))
     2     let a=new Set();//此处加上分号,因为下面这行代码以[]开头
     3     [1,2,3,2,3,'2','3'].forEach(element => {
     4       a.add(element)
     5     });
     6     //此处说明Set内部使用的是严格相等运算符===
     7     console.log(a)//Set(5) {1, 2, 3, "2", "3"}
     8     for(let i of a){
     9       console.log(i,typeof i)
    10     }
    实际上Set函数接收的参数不仅仅是数组,是可迭代(iterable)的数据结构【类似Python】
     
    同时注意:两个空对象不严格相等(引用的内存地址不同),所以Set里面可以加入多个空对象
    1 console.log({}==={})
    2     let b=new Set()
    3     b.add({})
    4     b.add({})
    5     console.log(b,b.size)//Set(2) {{…}, {…}} 2
     
    Set实例方法add(value),delete(value),has(value),clear()
    Set实例属性Set.prototype.constructor(默认就是Set本身)    Set.prototype.size:Set包含元素个数
    1 let c=new Set()
    2     c.add(1).add(2).add(3).add(2)
    3     console.log(c)//Set(3) {1, 2, 3}
    4     c.delete(2)
    5     console.log(c)//Set(2) {1, 3}
    6     console.log(c.has(2))//false
    7     c.clear()//清空所有值
    8     console.log(c)//Set(0) {}

    3.Map"值对值"的对应 对比传统的对象 "字符串对值"的对应

     1 let m=new Map([
     2       [1,10],
     3       [true,'100']
     4     ])
     5     console.log(m)//Map(2) {1 => 10, true => "100"}
     6 
     7     console.log(m.size)//2
     8     console.log(m.has(1))//true
     9     console.log(m.get(true))//100
    10     m.set(1,100)
    11     console.log(m)//Map(2) {1 => 100, true => "100"}
    也就是说Map的键不像对象的键只是字符串map的键可以是字符串,布尔值,数值等类型
    Map更符合hash结构
     
  • 相关阅读:
    zookeeper使用场景
    zookeeper安装配置
    hadoop 远程调试
    deep learning笔记
    Sentiment Analysis(1)-Dependency Tree-based Sentiment Classification using CRFs with Hidden Variables
    PRML阅读笔记 introduction
    Python 学习笔记(2)
    python nltk 学习笔记(5) Learning to Classify Text
    python nltk 学习笔记(4) Writing Structured Programs
    python nltk 学习笔记(3) processing raw text
  • 原文地址:https://www.cnblogs.com/why-not-try/p/8081626.html
Copyright © 2011-2022 走看看