es6
1.新增加let命令用来声明变量,用法类似var;注:let声明的变量只在代码块内有效.此命名方式和es5中的var是有区别的,
在es5中只是包含全局变量和局部变量的概念
{
let a = 10;
var b = 30;
}
console.log(a);//a is not defined
console.log(b);//30
可以用于for循环;
提示:var变量存在变量提升,就是变量可以在声明的前面使用但是输出结果为undefined。
let声明的变量只能在声明之后调用,否则报错。
注意暂时性死区,
2.const声明一个只读的常量,一旦声明常量的值就不会改变(在声明的同时初始化,否则报错。只在声明的块级作用域内有效,也存在暂时性死区,
所以只能是声明后使用)
3.变量的解构赋值;数组,对象
对象的解构与数组有一个重要的不同。
数组的元素是按次序排列的,变量的取值由它的位置决定;
而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
let[a,b,c]=[1,2,3]//允许对应位置赋值(模式匹配:只要等号的两边的模式相同,左边的变量就会被赋予对应的值)
函数参数的解构赋值:
实例:
1.function add([ x , y ]){
return x + y
}
add([1 , 2]);//3
2.[[1 , 2] , [3 , 4]].map(([ a , b] => a + b))
//[3 , 7]
3.函数参数的解构也可以使用默认值;
function move({x=0,y=0}={}){
return [ x , y]
}
move({x;3,y:8})//[3,8]
move({x: 3}); // [3, 0]
move({}); // [0, 0]
move(); // [0, 0]
3.1圆括号问题:一个式子到底是模式还是表达式只有解析到等号才知道
// 返回一个数组
function example() {
return [1, 2, 3];
}
let [a, b, c] = example();
// 返回一个对象
function example() {
return {
foo: 1,
bar: 2
};
}
let { foo, bar } = example();
//提取json数据
let jsonData = {
id: 42,
status: "OK",
data: [867, 5309]
};
let { id, status, data: number } = jsonData;
console.log(id, status, number);
3.2遍历map结构:
var map = new Map();
map.set('first', 'hello');
map.set('second', 'world');
for (let [key, value] of map) {
console.log(key + " is " + value);
}
// 获取键名
for (let [key] of map) {
// ...
}
// 获取键值
for (let [,value] of map) {
// ...
}
4.数组的扩展:
4.1 Array.from()可以把类似数组的对象和可以遍历的对象转化成数组
实例:
类似数组的对象转化为真数组
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
// ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']