主要内容
1、let和var、const
1.1 let和var的区别**
1、let有块作用域而var只有函数作用域和全局作用域。 2、let不可以进行变量提升,而var可以进行变量提升。 3、let不可以重复声明。 for循环很适用于let
1.2、const
const 声明的是只读变量,意味着,一旦声明之后必须初始化,否则会报错。
2、ES6解构赋值
解构赋值是对赋值运算的扩展,他是一种对数组或者对象进行模式匹配然后对其中的变量进行赋值。
2.1 基本
let [a,b,c]=[1,2,3];
//a=1
//b=2
//c=3
2.2 可嵌套
let [a,[[b],c]=[1,[[2],3];
2.3 可忽略
let [a,,b]=[1,2,3];
//a=1
//b=3
2.4 剩余运算符
let [a,...b]=[1,2,3];
//a=1
//b=[2,3]
2.5 字符串等
let [a,b,c,d,e]="hello";
3、对象模型的解构
3.1 基本
let {foo,bar}={foo:'aaa',bar:'bbb'}
// foo='aaa'
// bar='bbb'
let {baz:foo}={baz:'ddd'};
// foo='ddd'
3.2可嵌套可忽略
let obj={p:['hello',y:'world']};
let {p:[x,{y}]}=obj;
//x="hello"
//y="world"
4、symbol
ES6引入一种新的原始的类型symbol,表示独一无二的值,最大的用法是来定义唯一的属性名。
4.1基本用法
symbol 不能用new 来命令,因为symbol是原始的数据类型,不是对象。可以接收一个字符串作为参数。
let s1=Symbol("HELLOWorld")
console.log(s1)
typeof(s1)
let st=Symbol("HELLOWorld")
console.log(st===s1) //返回false
4.2作为属性名
由于每个Symbol的值都是不相等的,所以Symbol作为对象的属性名,可以保证属性不重名
5、MAP对象
map对象保存键值对,任何值(对象),也就是哈希表
5.1 key是字符串
let myMap=new Map()
let keyString="a string"
myMap.set(keyString,"这是一个字符串")
console.log(myMap.get(keyString)); //这是一个字符串
console.log(myMap.get("a string")); //这是一个字符串
5.2 key是对象
let myMap=new Map()
let keyObj={};
myMap.set(keyObj,"和键 keyObj 关联的值 ");
myMap.get(keyObj);
myMap.get({});
5.3 key是函数
let myMap=new Map()
let keyFunc=function(){} //
myMap.set(keyFunc,"keyFunc关联的值");
myMap.get(keyFunc);
myMap.get(function(){});
6、Map
6.1 Map迭代
对Map进行遍历主要用for...of...和forEach()
let myMap=new Map();
myMap.set(0,"zero");
myMap.set(1,"one")
//for of
for(let [key,val] of myMap){
console.log(val)
}
//for in
for(let item in myMap){
console.log(item) //for in 遍历不了Map
}
//forEach()
myMap.forEach(function(val,key){
console.log(key);
console.log("-------")
console.log(val)
})
6.2 Map对象的操作
6.2.1 Map与Array的转换
6.2.2 Map的克隆
let myMap1=new Map([["key1","false"],["key2","true"]]);
let myMap2=new Map(myMap1);
console.log(myMap1===myMap2) //返回false
console.log(myMap2)
6.2.3 Map的合并
let first=new Map([[1,"one"],[2,"two"],[3,"three"]])
let second=new Map([[1,"一"],[2,"二"]]);
let merged=new Map([...first,...second])
console.log(merged) //返回 [[1,"一"],[2,"二"],[3,"three"]]
7、Set 对象
Set对象允许你存储任何的唯一值,无论是原始值或者是对象引用
Set 对象存储的值是唯一的,所以需要判断两个值是否恒等。有几个特殊的:
- +0与-0在存储判断唯一性的时候恒等,所以不重复。
- undefined和undefined是恒等的,所以不重复。
- NaN与NaN是不恒等的,但是在Set中只能存一个,不重复
let mySet=new Set();
mySet.add(1); //Set(1){1}
mySet.add(5); //Set(2){1,5}
mySet.add(5); //Set(2){1,5} 这里体现了值的唯一性
mySet.add("somE TXT");
console.log(mySet); //{1,5,"somE TXT"} 这里体现了类型的多样性
console.log("--------------")
let obj={a:1,b:2};
mySet.add(obj)
console.log(mySet);
//Set(5){1,5,"somE TXT",{...}}
//这里体现了对象之间的不同恒等,即便值相等,Set也能存储
Set对象的作用
7.2 数组去重
let myArray=new Array(1,3,5,7,9,1,3,5,7,9);
let myset1=new Set(1,3,5,7,9,1,3,5,7,9);
let myset2=new Set(myArray);
console.log(myset1) //返回 1 3 5 7 9
console.log(myset2) //返回 1 3 5 7 9
7.3 求并集
let setA=new Set([1,3,5,7]);
let setB=new Set([2,4,6,8,10]);
let union=new Set([...setA,...setB])
console.log(union); //返回1 2 3 4 5 6 7 8 9 10
7.4 求交集
let aSet=new Set([1,2,3,4,5,6])
let bSet=new Set([1,3,5,7]);
let interSet=new Set([...aSet].filter(x=>bSet.has(x)))
console.log(interSet); //返回1 3 5
7.5 求差集
let setA=new Set([1,2,3,4,5,6]);
let setB=new Set([1,3,5,7]);
let subT=new Set([...setA].filter(x=>!setB.has(x)));
console.log(subT) //返回 2 4 6