数据类型分类:
-
基本数据类型
number string boolean undefined null symbol -
复杂数据类型
Array Object Function Number String Boolean Math Date RegExp Promise Set Map基本新增: symbol
复杂新增: Set Map
Set是一组key的集合,但不存储value, 而且key不重复,可自动排重。
- Set 存储一系列无序数据的集合
=> 特点: 存储的元素不重复 ,可以用来去重
=> 创建方式
let set = new Set()
=> 常用方法及属性
size属性 用来获取该数据结构中有多少数据的
add() 往Set()实例对象里面夹数据
delete() 删除括号里对应数据
clear() 清除所有数据
function test1() {
// let set = new Set() //创建空集合
let set = new Set([100, 'hello', 200, true, {
name: 'admin'
}])
set.add(300)
console.log('size :', set.size);
console.log(set);
set.delete(100)
console.log(set);
// set.clear()
console.log(set);
set.forEach(item => {
console.log(item);
})
return set.size
}
test1()
Map 是一组键值对的结构,具有极快的查找速度。
Map
{key:value,key:value}
{name:'admin',age:20}
[ ['admin',100],['true',20] ] 前面是key,后面是值,例如 'admin'与100
function test4(){
let map = new Map([[true,1],['hello',{name:'admin'}]])
console.log(map);
console.log(map.size);
map.set(100,'200')
console.log(map.get('hello')); //得到{name:'admin'}
console.log( map.has('world') ); //判断是否有'world'
}
test4()
Symbol
ES6引入Symbol的原因: ES5的对象属性名都是字符串,很容易造成属性名冲突。 比如,使用了一个他人提供的对象,想为这个对象添加新的方法,新方法的名字就有可能与现有方法产生冲突。 如果有一种机制,保证每个属性的名字都是独一无二的,这样就从根本上防止了属性名冲突。
//注意,Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。
function test6() {
let name = Symbol('name')
let obj = {
name: 'admin',
age: 20
}
let name1 = Symbol('name')
let newObj = {
num: 1001,
name1: 'root',
...obj
}
console.log(newObj);
}
test6()