let 关键字 具有块级作用域特性,且不存在变量提升,for()中声明 是等于再其后的{}域中声明
特例 var a = 1;{ console.log(a) let a = 2;}这个报错,原因再{}中有let定义的变量a,但又后声明。
const 也具有块级作用域特性,且不存在变量提升(要先声明才能使用的意思)。
结构赋值
let arr = [1,2,3]; let [a,b,c] =arr ;
剩余参数 let arr = ['a1','a2','a3']; let[p1,...p2,] = arr;//p1='a1'; p2=['a2','kuia3']
let person = {name:'tod',age:99}; let {name,age }= person ; let {name: myname} //myname='tod'
箭头函数 不绑定this关键字,指向定义位置上下文(作用域)的this
只有一个变量可以省略 (),只有一行可以省
对象不具有作用域,所以以下this指向window
var age2 = 33;
var o ={
age2:2,
say:() => console.log(this.age2)
}
o.say(); //33
扩展运算符可以将数组拆分成以逗号分隔的参数系列
var arr = [1,2,33]; console.log(...arr); //1 2 33
var a1 = [1,2,33]; var a2= [13,23,33]; a1.push(...a2);console.log(a3);//[1, 2, 33, 13, 23, 33]
var a1 = [1,2,33]; var a2= [13,23,33]; var a3 = [...a1,...a2];console.log(a3);//[1, 2, 33, 13, 23, 33]
将伪数组转换成真数组,var divs = document.getElementsByTagName('div'); var arr = [...divs];
Array构造函数将伪数组转换成真数组
var arlike ={'0':2,'1':3,length:2}; var arr=Array.from(arlike,item => item*2);console.log(arr);
原型 是构造函数的的一个prototype属性,是一个对象,这个对象中所以的属性和方法都被构造函数所拥有。
Object的常用方法
()的keys() 获取key数组,ObjectdefineProperty(obj,key,{})
js的严格模式
‘use strict’ //开启严格模式
1.不能随意删除已经声明的变量
2.变量必须先申明才能使用
关于this
3.严格模式下的this·指向的不是window而是undefined
4.严格模式 构造函数不加new调用,this指向的是undefined,如果赋值会报错
5.定时器中的this还是指向window
函数变化:
1.函数不可以有重名参数
2、不允许再非函数的代码块中声明函数