let const
1.var会先声明变量而let不会
2.let不允许重复声明相同名字的变量
3.let存在块级作用域,作用域外不可使用且可以重复定义
4.let存在暂时性死区
const为常量 除了具有let的所有特性外,不允许修改,且在声明后就需要赋值
变量解构赋值
格式:
- 数组
let [a, b, c] = [1, 2, 3];
//a等于1,b等于2,c等于3
let [a, ...c]=[1,2,3];
//a等于1,...c等于[2,3]
等号两边结构类似时,会给对应位置的变量赋值
- 对象
let { bar, foo } = { foo: 'aaa', bar: 'bbb' };
对象变量同名时才能够正确赋值,否则值会等于undefined
- 默认值
var {x = 3} = {};
x // 3
var {x, y = 5} = {x: 1};
x // 1
y // 5
var {x: y = 3} = {};
y // 3
var {x: y = 3} = {x: 5};
y // 5
var { message: msg = 'Something went wrong' } = {};
msg // "Something went wrong"
当对象的值严格等于undefined时生效(赋值为null则不会变为默认值)
- 字符串
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"
字符串被解构时会被看做数组
- 函数
function add([x, y]){
return x + y;
}
add([1, 2]); // 3
在传入参数时,函数会被解构成对应的变量