- 全称:ECMAScript 6
- 2015年6月正式发布
- javascript下一代语言标准
- 能够开发复杂大型的程序
- 成为企业级的语言
一、let
let 特点:
- let声明的变量不能重复声明
- let声明的变量不能变量提升
- 使用let声明的变量只在所处于的块状作用域有效
- 使用let声明的变量不属于顶层对象window
二、const
const特点:
- 声明常量用大写(不是规则,是一种默契)
- 声明的常量不能修改
- 具有块状作用域
- 使用const声明的常量也不属于顶层对象window
关于var let 的经典面试题:
var arr = [];
for(var i = 0; i < 2; i++) {
arr[i] = function {
console.log(i);
}
}
arr[0] i=?
arr[1] i=?
var arr = [];
for(let i = 0; i < 2; i++) {
arr[i] = function {
console.log(i);
}
}
arr[0] i=?
arr[1] i=?
第一个:
变量 i 是全局的,函数执行时输出的都是全局作用域下的 i 值
所以:
arr[0] i = 2
arr[1] i = 2
第二个:
每次循环都会产生一个块级作用域,每个中的变量都是不同的,函数执行时输出的是自己上一级作用于下的值
所以:
arr[0] i = 0
arr[1] i = 1
三、变量的解构赋值
1. 数组的解构赋值
var [a,b,c] = [1,2,3]
console.log(a,b,c)
2. 对象的解构赋值
let {bar,foo} = {bar:"lili",foo:100};
console.log(bar,foo);
let obj = {
p:["hello",{y:"world"}]
}
let {p:[x,{y:y}]} = obj;
console.log(x,y)
let [a,b,c] = "var"
console.log(a,b,c)
let {lengh: len} = "function";
console.log(len);
let {PL:P} =Math;
console.log(p);
let a = 100;
let b = 200;
[a,b] = [b,a];
let jsonData = {
id:1,
status:"okokok",
data:[1,2,3,4,5]
}
let {id,status,data} = jsonDta;
四、for…of
for(let val of xxx) {
console.log(val)
}
1.用于遍历:
- 数组
- 字符串
- 元素列表
- 元素列表
- 类数组对象
- es6新增Map Set
2.比较
- for of — 纯数组与类数组集合均可遍历
- for in — 用于数组与对象,获取的时key
- forEach — 用于纯属组