目录
ES6简介
ES的全称:ECMAScript,由ECMA国际标准化组织制定的一项脚本语言的标准化规范。
ES6泛指ES2015及以后的版本
ES6新增语法
let
ES6新增的关键字,用于声明变量的关键字。
let不允许重复声明变量。
let a = 10;
let a = 20; //不能重复定义
let声明的变量只在所处的块级有效。
if(true){
let a=10;
}
console.log(a); //a is not defined
let可以防止循环变量变成全局变量。
for(let i=0;i<10;i++){}
console.log(i); //i is not defined
let不存在变量提升。
console.log(a); //a is not defined
let a=10;
let声明的变量具有暂时性死区特性
var num=10;
if(true){
console.log(num); //num is not defined
let num=20;
}
经典面试题
var声明i是全局变量,循环过后就变成了10,函数执行时输出的是全局变量的值
var arr=[];
for (var i=0;i<10;i++){
arr[i]=function(){
console.log(i);
}
}
arr[0](); //10
arr[1](); //10
let每次循环都会生成一个块级作用域,每个块级作用域的变量都是不同的。
var arr=[];
for (let i=0;i<10;i++){
arr[i]=function(){
console.log(i);
}
}
arr[0](); //0
arr[1](); //1
const
声明变量,声明时必须赋值,常值就是值(内存地址)不变的量,也是块级作用域,不存在变量提升。
const arr=[100,200];
arr[0]='a';
console.log(arr); //['a',200]
arr=['a',100]; //到这行报错,不允许修改,这是修改了地址
console.log(arr);
常量的值不允许修改。
const a = 10;
a = 20; //报错,不允许给常量赋值
对于数组和对象的修改不算对常量的修改,不会报错。
const arr = [100,200];
arr.push(300); //不报错,因为没有修改地址
解构赋值
ES6允许从数组中提取值,按照对应的位置,对变量赋值,对象也可以解构。
数组解构允许按照一一对应关系从数组提取值赋给变量。
解构不成功变量的值为undefined。
let [a,b,c]=[1,2,3];
console.log(a); //1
对象解构允许使用变量的名字匹配对象的属性,匹配成功将属性的值赋给变量。
let person={name:'zhangsan',age:18};
let {name,age}=pe