美文网首页
ES6新增的数据类型

ES6新增的数据类型

作者: 学的会的前端 | 来源:发表于2020-02-13 01:05 被阅读0次

JS 数类型:

  • 基本数据类型:numberstringbooleannullundefinedSymbol(新增)
  • 复杂数据类型:object
    除了新增的Symbol之外,其他的SetMapWeakSetWeakMapTypeArray均为object

Symbol

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

  • Symbol()函数会返回Symbol类型的值,该类型的值具有静态属性和静态方法,但它不支持语法 new Symbol()
a = window.Symbol()   //Symbol()是一个全局函数
a //Symbol()
  • 每个从Symbol()返回的Symbol值都是唯一的;
a = window.Symbol()
b = window.Symbol()
a === b //false
  • 一个Symbol的值能作为对象属性的标识符,在ES6之前,对象属性名只能是字符串.
a = window.Symbol
var obj = {}
obj[a] = 'aaaaa'
Symbol的值可以作为对象的属性名.PNG
  • Symbol是一种基本数据类型,不是对象。
a = Symbol()
typeof a //symbol
  • 在ES6之前,无法做到真正有一个私有属性,但是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)  //获取
  • 获取键值对里面的key
for(let key of map.keys()){
  console.log(key)
}
  • 获取键值对里的value
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为弱引用
  • WeakSet对象set对象的区别二:WeakSet对象不能获取到键值对,即没有entries

WeakMap对象

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

  • 区别:WeakMap对象不能获取到键值对,即没有entries

相关文章

网友评论

      本文标题:ES6新增的数据类型

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