看看这个解构分配(ES6):
var {a, b} = {a:1, b:2}
console.log(b); //2
很明显,a
将是1
而b
将是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
?
答案 0 :(得分:6)
这是使用默认初始化程序进行解构。会发生什么:
{x: 15}
对象在表达式{x: …}
x
属性匹配15
在表达式{y = 10}
({y: y = 10}
的简写)上进行了解构。为此,隐式强制对象 - 如new Number(15)
y
属性无法匹配,因为Numbers没有 - 因此会采用默认值并评估初始化(至10)10
已分配给y
变量。您还可以try将y
更改为Number.prototype
上存在的属性,以获得不同的结果。