美文网首页
es6新增数据类型

es6新增数据类型

作者: sweetBoy_9126 | 来源:发表于2019-01-04 16:18 被阅读10次
symbol

symbol是基本数据类型,每一个symbol值都是一个全局唯一的字符串,你永远不会知道它里面存的什么,symbol值可以作为对象的属性的键。

总结:

  1. window.Symbol()
  2. Symbol()前面不能加new
  3. Symbol() !== Symbol()
  4. object[Symbol()]='xxx' 可以作为对象的键,创造私有属性

symbol作用:
可以造一个隐藏属性
使用方法:在一个块级作用域里使用symbol

{
    let a = Symbol()
    let object = {
        name: 'ooo',
        age: 10,
        [a]: '隐藏属性'
    }
    window.object = object
}

上面的代码我们可以访问到它里面的name和age但是我们不能访问到a,包括我们直接通过object[Symbol]也访问不到它

Set

set类型是Object里面的一种
Set对象里面只要有重复的值他都会只保留一个,无论是原始值还是对象引用。

作用:实现数组去重

  • 不使用Set实现数组去重
var a = [1,2,3,1,5,6,2]
function uniq(array){
    var result = []
    var hash = {}
    for(var i =0;i<array.length;i++){
        hash[array[i]]=true
    }
    for(key in hash){
        result.push(key)
    }
    return result
}
uniq(a)
//["1", "2", "3", "5", "6"]

问题:
1.他无法区分数字和字符串
2.如果数组里面有对象我们的去重方法就会失败,因为对象里面的下标(键)只能是字符串

  • 使用Set实现数组去重

其中Array.from是将任意类型转化成一个数组

Map

可以允许任何类型作为对象的键,弥补了object只能使用字符串作为键的问题

  • 通过for...of进行遍历
    .keys()拿到所有的key
for(let key of map.keys()){
    console.log(key)
}

.values()拿到所有的value

for(let key of map.values()){
    console.log(key)
}

.entries()拿到所有的key和value

for(let key of map.entries()){
    console.log(key)
}

weakSet和WeakMap是弱引用,放在它们的key里面的东西会自然消失,它无法知道自己有哪些值

相关文章

网友评论

      本文标题:es6新增数据类型

      本文链接:https://www.haomeiwen.com/subject/uewhrqtx.html