1.let 和 const 命令
1.1 let 命令,用来声明变量。
1.2 let 声明的变量只在它所在的代码块中有效。
1.3不存在变量提升。
2.1 const 声明一个只读的常量,一旦声明,常量的值就不能改变。
2.2 const 命令声明的常量也是不提升,同样存在暂时性死去,只能在声明的位置后面使用。
2.3 const 声明的常量,也与let一样不可重复声明。
2.es6 变量的解构赋值 点击打开链接
2.1 es6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。
2.2 模式匹配,只要等号两边的模式相同,左边的变量就会被赋予对应的值
eg:
let [a, [[b], c] = [1,[[2], 3]; a //1 b //2 c //3 let [x, ,y] = [1,2, 3]; x //1 y //3 let[head, ...tail] = [1, 2, 3, 4]; head // 1 tail // [2,3,4] let [x, y, ...z] = ['a'] x //'a' y // undefined z // [] 如果解构不成功,变量的值就等于 undefined var [foo] = []; var [bar, foo] = [1]; 以上两种情况都属于解构不成功 foo 的值都会等于 undefined. |
2.3 不完全解构
let [x, y] = [1, 2,3]; x // 1, y // 2 let [a, [b], d] = [1, [2, 3] 4]; a // 1 b // 2 d // 4 上面的两个例子,都属于不完全解构,但是可以成功。如果等号的右边不是数组,会报错。 |
3.es6对象的解构赋值
3.1 对象的解构与数组有一个重要的不同,数组的元素是按次序排列的,变量的取值有他的位置决定;而对象的属性没有次序,变零必须与属性同名,才能渠道正确的值
var {a, b} = {a:aaa", b:'bbb}; a: // "aaa" b // "bbb" var {baz} = {foo:"aaa", bar :"bbb"}; baz // undefined |
3.2 如果变量名与属性名不一致
var {foo:baz} = {foo: "aaa", bar: "bbb"}; baz // "aaa" |
4.字符串的解构赋值
const [a, b, c, d, e] = 'hello'; a // "h" b // "e" c // "l" d //"l" e // "o" 类似数组的对象都有一个 length 属性, 因此还可以对这个属性解构赋值。 let {length : len} = 'hello'; len // 5 |
5,用途
5.1 交换变量的值
:[x, y] = [y,x];
5.2 从函数返回多个值
返回一个数组 function example() { return [1,2,3]; } var [a, b, c] = example(); 返回一个对象 function example() { return { foo: 1, bar:2 }; } var {foo, bar } = example();