发现隐含的强制?

时间:2015-09-05 20:10:39

标签: javascript ecmascript-6

看看这个解构分配(ES6):

var {a, b} = {a:1, b:2}
console.log(b); //2

很明显,a将是1b将是2

Babel将其视为:

"use strict";
var _a$b = { a: 1, b: 2 };
var a = _a$b.a;
var b = _a$b.b;
console.log(b);

行。

但是看看这段代码:

var { x : { y = 10 } } = { x : 15 };
console.log(y); //10

尽可能see,结果为10。根据凯尔辛普森的说法,这里有一种隐含的强制。

问题:

这里发生的隐式强制是什么?y为什么/如何10

1 个答案:

答案 0 :(得分:6)

这是使用默认初始化程序进行解构。会发生什么:

  1. {x: 15}对象在表达式{x: …}
  2. 上进行了解构
  3. x属性匹配
  4. 15在表达式{y = 10}{y: y = 10}的简写)上进行了解构。为此,隐式强制对象 - 如new Number(15)
  5. y属性无法匹配,因为Numbers没有 - 因此会采用默认值并评估初始化(至10)
  6. 10已分配给y变量。
  7. 您还可以tryy更改为Number.prototype上存在的属性,以获得不同的结果。