美文网首页
ES6笔记(解构赋值)

ES6笔记(解构赋值)

作者: 浮生随笔 | 来源:发表于2018-07-30 17:02 被阅读9次

ES6笔记(解构赋值)

解构赋值

变量的解构:

  • 解构赋值允许指定默认值。
  • 解构赋值必须保证赋值方 被赋值方类型一直 但Item允许有遗漏或者多出。
  • 默认值可以引用解构赋值的其他变量,但该变量必须已经声明
let [x = 1, y = x] = [];     // x=1; y=1
let [x = y, y = 1] = [];     // ReferenceError

对象的 解构赋值:

  • 对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;

  • 而对象的属性没有次序,变量必须与属性同名,才能取到正确的值
    (数据库、序列化)

  • 对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者;前者是key,后者才是变量!

注意,采用这种写法时,变量的声明和赋值是一体的。对于let和const来说,变量不能重新声明,所以一旦赋值的变量以前声明过,就会报错。

字符串的解构赋值

字符串也可以解构赋值。
这是因为此时,字符串被转换成了一个类似数组的对象
类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。

let {length : len} = 'hello';
len // 5

let {toString: s} = 123;
s === Number.prototype.toString // true

let {toString: s} = true;
s === Boolean.prototype.toString // true

let { prop: x } = undefined; // TypeError
let { prop: y } = null; // TypeError

解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。
undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。

  • 不能使用圆括号的情况
    • 变量声明语句中,不能带有圆括号
    • 函数参数中,模式不能带有圆括号。
    • 赋值语句中,不能将整个模式,或嵌套模式中的一层,放在圆括号之中
  • 可以使用圆括号的情况只有一种:赋值语句的非模式部分,可以使用圆括号。

相关文章

网友评论

      本文标题:ES6笔记(解构赋值)

      本文链接:https://www.haomeiwen.com/subject/gfgfvftx.html