一、变量的解构赋值
1)数组和对象解构的区别
- 数组的元素是按次序排列的,变量取值由 位置 决定
let [x, y] = [1, 2, 3];
x // 1
y // 2
如果x,y位置互换了,则值也变了
···
let [y, x] = [1, 2, 3];
x // 2
y // 1
···
- 对象的属性是没次序的, 变量必须与属性同名才能取到正确的值
let { foo,baz } = { foo: 'aaa', bar: 'bbb' };
foo //'aaa'
baz // undefined
- 如果解构失败,变量的值就等于undefined
2) 赋值的话必须嵌套(),否则会报错, 加上()浏览器会把()里的内容当做表达式去解析
let obj = {};
let arr = [];
//解构赋值允许等号左边的模式之中,不放置任何变量名
({foo:obj.prop, bar: arr[0]} = {foo:123, bar:true})
obj //{prop:123}
arr // [true]
3)如果要将一个已经声明的变量用于解构赋值,必须非常小心。
// 错误的写法
let x;
{x} = {x: 1};
// SyntaxError: syntax error
代码的写法会报错,因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。所以需要跟2)一样加上()才能避免 JavaScript 将其解释为代码块
4) 对数组进行对象属性的解构,因为数组其实就是个特殊的对象
let arr = [1, 2, 3];
let {0 : first, [arr.length - 1] : last} = arr;
first // 1
last // 3
网友评论