1.let :块级作用域、没有预解析、不能重复声明同一个变量
const常量 NUM = 10 ;常量不可修改,如果是对象的话,可以修改值
2.解构赋值
eg1:obj = {data:123},可以直接将data从obj中解构出来:let {data} = obj;
eg2:let a = 0; let b = 1; 如何交换二者的值?:[a,b] = [b,a]
3.转义字符串
b="不错"
a = `今天天气${b}` //将变量直接${}差值表达式的方式,插入字符串中
4.展开运算符【...】
let arr = [1,2,3]
arr2 = [0,...arr]
arr2----- >结果为[0,1,2,3]
PS:但是这里是浅拷贝,传址问题依然存在
5.箭头函数()=>{}
①箭头函数没有this,this指向声明时所在作用域的this;
②箭头函数没有arguments,因此可以写为
fn = (...arg)=>{} ------------------------fn(1,2,3,4);
③不可以作为构造函数
6.Array相关方法
a.Array.isarray() / instandof 用来检测是否为数组;
b.Array.from()将类数组(Nodelist)转为数组
c.Array.findIndex(function(item){ //寻找下标,返回首次满足条件的下标,不存在返回-1;
return item==" xxx "
} )
d.Array.find()返回首次满足条件的项
7.对象方法:set/get
obj= {
n = 0;
set a{……}; //设置a会触发set,获取a会触发get
get a{……};
}
8.属性名表达式
a = {n:"哈哈哈哈"} //n为一个str
a = {[n]:"哈哈哈哈"} //n可以是变量传入
9.keys/values
Object.keys(obj);//可以拿到obj对象的所有key
Object.values(obj);//可以拿到obj对象的所有value
10.let a= 10; let b ="10"; Object.is(a,b);-------false,不全等
let a = 10-"a"; let b = 10-"b"; Object.is(a,b);-------true,因为可以检测NaN
11.对象冻结 Object.freeze(obj) //浅冻结
之后,其他代码不可以修改或者删除obj对象中的任何属性
12.自动去重
arr = [1,1,2,2,3]
Array.from(new Set(arr));
ES6提供了 Set,类似与数组,但是自动去重
具备方法:add ,delete, has(), clear ,size = length
13.for of 遍历每一项
arr = [1,4,5]
for(let s of arr){console.log(s)}
14.forEach
arr.forEach((item)=>{
console.log(item)//遍历arr中的每一项
})
15.类class 和类继承extends
class Person {
constructor(name){
this.name = name;
}
say(inner){
console.log(`${this.name}说:${inner}`);
}
static fn(){
console.log("静态方法");
}
}
let p = new Person("maodou");
p.say("猫咪最可爱");
Person.fn();//类的静态方法只给类自身用,动态方法给实例化对象用
//类继承也很简单
class Study extends Person {
coding(){
console.log("特别会写代码");
}
}