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结构
     
  • 相关阅读:
    save html to local
    Django REST framework¶
    a colorful termial output for phantomjs porting from casperjs
    jespern / djangopiston / wiki / Documentation — Bitbucket
    PyKHTML, a Python interface to KHTML
    phantomjs/examples/echoToFile.js at master · ariya/phantomjs
    Scraping multiple sites in parallel and memory consumption Google Groups
    jQuery Arrays | Create, Add To, Remove From and Compare
    They're hiring based on New Brunswick, NJ, USA
    FudanNLP  java based
  • 原文地址:https://www.cnblogs.com/why-not-try/p/8081626.html
Copyright © 2011-2022 走看看