ES6新增的数据类型

2020-02-13  本文已影响0人  学的会的前端

JS 数类型:

Symbol

静态属性和静态方法统称为静态成员,可以通过构造函数.直接调用。

a = window.Symbol()   //Symbol()是一个全局函数
a //Symbol()
a = window.Symbol()
b = window.Symbol()
a === b //false
a = window.Symbol
var obj = {}
obj[a] = 'aaaaa'
Symbol的值可以作为对象的属性名.PNG
a = Symbol()
typeof a //symbol
{
  let a = Symbol()
  let obj = {
    name: 'aaaa',
    [a]: '隐藏' //不能写成a,这是字符串a
  }
  window.object = obj;
}
Symbol创造隐藏属性.PNG

Set

Set对象允许你存储任何类型的唯一值,无论是原始值还是对象引用。

new Set([1,2,1,4,3,5,3,4])
//Set(5) {1, 2, 4, 3, 5} //返回的是一个对象
//ES5
var a = [1, 2, 5, 4, 5, 3, 2, 1, 3];

function uniq(array) {
  var result = [];
  var hash = {};
  for (var i = 0; i < array.length; i++) {
    hash[array[i]] = true; //把数组的值作为对象的key,存储起来,并且赋值true,相同的数值不进行多次处理
  }
  console.log(hash);
  for (let key in hash) {
    result.push(key); //把hash对象的key push到数组里
  }
  return result;
}

console.log(uniq(a)); //['1','2','3','4','5']

/*
缺点:
1: 返回的新数组里面的数字不是真实的数字,是字符串数字,因为在ES6之前,对象的属性名只能是字符串
2. 无法区别原数组中的数字和字符串数字,比如'4'和4,会被认为是一个
3. 无法统计对象,比如[1,2,3,{name:object}] //返回的新数组是["1", "2", "3", "[object Object]"]
*/


//ES6

//set对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用 

var a = [1, 2, 5, 4, 5, "4", 3, 2, 1, 3, { name: "object" }]; 

 function uniq(array) { 
  return Array.from(new Set(array)); 
  //等价于[...new Set(array)] 
} 
//new Set(array)得到的是对象,所以Array.form将对象变为数组 
console.log(uniq(a)); //[1, 2, 5, 4, "4", 3, {…}] 

Map对象

Map对象保存键值对,任何值(对象或者原始值)都可以作为一个键或一个值。
Map对象最大的优点就是弥补了对象只能用自古城窜作为key的这一缺点,Map对象使得任何都可以作为key。

var map = new Map()
var a = {}
map.set(a,'hi') //设置
map.get(a)  //获取
for(let key of map.keys()){
  console.log(key)
}
for(let value of map.values()){
  cosnole.log(value)
}
for(let key of map.entries()){
  console.log(key)
}

WeakSet对象

WeakSet对象允许你将弱引用保持对象存储在一个集合中,弱引用不属于GC(垃圾回收)的计算范围,即弱引用的属性依旧可以被回收。

var Wset = new WeakSet()
var o = {}
Wset.add(o)
o = null //可以被回收,Wset为弱引用

var set = new Set()
var o = {}
set.add(o)
o = null //不可以被回收,set为弱引用

WeakMap对象

WeakMap对象是一组键值对的集合,其中键是弱引用,并且只能是对象,而值可以使任意值。

上一篇 下一篇

猜你喜欢

热点阅读