ES6新语法:
let
let a,b,c;声明变量
let a = 10; 不允许变量名重复,但var可以重复声明
let a = 12;
let声明的变量就是块级作用域。
块级作用域种的变量,在块级之外不能访问,但var可以。
if else for while等后面跟着大括号都属于块级作用域。
let 不存在变量的提升,但var存在。
不影响作用域链。在块级作用域没找到参数,就会往上继续找。
for(var i =0;i < 3;i++){
arr[i].onclick = function() {
this.style.backgroundColor = 'red';//这里this要换成arr[i]就会报错
因为var声明的变量是全局变量,而此时i变成了3,造成角标越界。
}
}
const
他是用来定义常量的。
注意:
1. 定义常量要赋值,并且常量名大写
2. 常量的值不允许更改。
3. 它是块级作用域。
4. 对于数组和对象的元素的修改,不算对常量值的修改,不会报错。因为这里所指的常量是指他们的地址值不变,所以不会报错。但要这样写就会报错:const ARR = [1,2,3,4]写成ARR =12;这样就报错,因为地址值改变了。
ES6允许按照一定模式从数组和对象种提取值,对变量进行赋值,也称解构赋值。
数组解构:
const ARR = [1,2,3,4];
let [a,b,c,d] = ARR;
console.log('a' + a); //1
console.log('b' + b); 2
console.log('c' + c); // 3
console.log('d' + d); //4
对象的解构:
const A = {
name: '海王星',
age: 234,
run: function() {
console.log('运动');
}
}
let {na,age,run} = A; //变量名要与对象中属性名相同,不然会找不到
console.log(na); //undefined,
let {run} = A; //方法的调用
run();
模板字符串:
它也是字符串,类型string。
let c = '屡屡';
let s = `${c}是个率`;//反引号可以拼接字符串。
简化对象属性书写:
let a = 'pp';
let fun = function() {
console.log('kk');
}
const s = {
a,
fun,
// fn: function(){}简写如下
fn(){
console.log('hh');
}
}
ES6允许使用箭头定义函数:=>
let a = function() {};//简写如下
let c = (a,b) => {
return a + b;
};
原因分析:this是静态的,它始终指向函数声明时所在作用域下的this值。无论调用什么方法。this指向的值不变。如call(),调用此方法this的值也不变。因为此方法会改变this的指向。
不能作为构造函数实例化对象。
不能使用arguments变量
函数简写:
//函数简写
//1.参数只有一个参数时小括号省略
let a = n => {
console.log(n);
}
a(6);//6
//2.当方法体中只有一条语句,可以省略大括号和retuen关键字
let s = n => n * n;
console.log(s(4));//16
箭头函数适合与this无关的回调,定时器,数组的方法回调。不适合与this有关的回调,如事件回调、对象的方法。对象里的this指向调用对象但写成箭头函数this指向window。
允许给函数参数赋初始值。一般把形参赋值的形参放在最后。
ES6引入rest参数,用于获取函数的实参,并且替代arguments.
rest参数用法: function(…args){},参数前面要跟三个点,要是有多个参数,rest参数写在最后,rest参数返回的时数组,而arguments返回的是对象。
【…】扩展运算符能将数组转换为逗号分开的参数序列
const arr = [1,2,3];
function a() {
console.log(arguments);
}
// a(arr);//(3) [1, 2, 3]
a(...arr);//0: 1,1: 2,2: 3,把数组中的元素当作参数传递