ES601

138 阅读3分钟

主要内容

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