Let和var区别
- 作用域不同
Let:{代码块} 只局限在当前代码块 var没有{}概念
2.作用域不会提升
Var会提升 let不会
3.在相同的作用域下不能声明相同的变量
Var可以 let不可以
4.For循环体现let父子作用域
Var的for循环如果不采用闭包会加到最大再传给{代码} 同步和异步事件
Const
- 当前代码块中生效
- 不会被提升
- 不能重复声明
- 声明的常量必须赋值,赋值以后不能被改变(对象obj中的引用可以修改)
结构赋值 ES6新增的知识点
允许按照一定模式从数组和对象中提取值,对变量进行赋值,这被称为解构赋值
数组的解构赋值
Let [name,age,sex]=[‘李四’,18,’male’];
Let[arr1,[arr2,arr3,[arr4,arr5]]]=[1,[2,3[4,5]]]; 嵌套
Name=’fxk’;
对象解构赋值
let {name,age,sex}={name:'zhangsan',age:55,sex:'male'};
里面也可以放对象和数组
键值对要一一对应
基本类型的解构赋值
let [a,b,c,d,e]='我是中国人';
字符串可以解构赋值 数字number不行,没有构造器
ES6新增的两种数据类型
Set和Map
Set:
- 没有重复数据,可以用来去重,key和value都是相等的
一个属性 size
四个方法 add delete has clear
Map
更加完善的数据类型
const map=new Map([
['name','zhangsan'],
['age',18],
['sex','female'],
[obj1,'今天天气很好'],
[obj2,'今天天气比较差']
]);
具有去重性
属性:size
方法:set和let、delete、has、clear keys(),values(),entries();
对map进行遍历 forEach()
map.forEach(function (value,index) {
console.log(index+": "+value);
})
注意事项:
map.set({},'keke');
map.set({},'xixi');
这两者是不同的
Symbol
场景 对象属性名都是字符串,容易造成属性名冲突
ES6新引入的原始数据类型Symbol,表示独一无二的值
let str1 = Symbol();
let str2 = Symbol();
console.log(str1 === str2);
console.log(typeof str1);
obj[Symbol('name')]='zhangsan';
obj[Symbol('name')]='lisi';
ES6新增的语法糖class
class Person{
constructor(name,age){
this.name=name;
this.age=age;
}
print(){
console.log("我叫"+this.name+",今年"+this.age+"岁");
}
}
let person=new Person('zhangsan',24);
console.log(person);
person.print();