javascript – ES6扩展运算符的应用是对象的标准ECMAScript规范吗?

MDN defines扩展运算符的用法仅用于数组.

例如,扩展运算符的正确用法如下所示

var parts = ['shoulders', 'knees'];
var lyrics = ['head', ...parts, 'and', 'toes']; // ["head", "shoulders", "knees", "and", "toes"]

我们在数组部件上应用了扩展运算符.

但是in the React docs,他们在像这样的对象上使用扩展运算符

var props = {}; 
props.foo = x; 
props.bar = y; 
var component = <Component {...props} />;

如果我实际上尝试在控制台中执行此操作,则会收到TypeError

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

我的问题是:

>在对象中使用扩展运算符是规范中实现的标准(并且这个用例在某种程度上从MDN文档中省略,并且我试图显示的控制台示例未正确完成,因此给出了TypeError)?
>如果不是标准的实现,什么是引擎盖下回事允许做出反应组件巧妙的传播经营者,因为它的确非标准的方法来行事(即作用于对象),并抑制将不可避免地出现的类型错误什么时候这样做?

If I actually try to do this in the console, I receive a TypeError

你在这里混淆了一些事情(如果它们看起来相似的话,不能责怪你).

在你的例子中,

console.log(...a);

…… a不是对象传播的应用.它有时被称为spread syntax(即使这个具体没有名称),这在ES2015中是标准化的.它在函数调用中用作最后一个“参数”,仅适用于迭代.对象不是可迭代的,因此您会收到错误.

对象扩展,目前是proposal,仅用于对象文字:

var foo = {x: 42};
var bar = {y: 21, ...foo}; // equivalent to Object.assign({y: 21}, foo);

what is going on under the hood

JSX(< Component {... props} />)中的使用又是一个稍微不同的东西,它是一个JSXSpreadAttribute,但它确实对象传播.如果您try it out in Babel,您可以看到它转换为:

var _extends = Object.assign || /* polyfill */;

React.createElement(Component, _extends({ foo: true }, props));
https://stackoverflow.com/questions/36074419/is-application-of-the-es6-spread-operator-on-objects-a-standard-ecmascript-speci

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:javascript – ES6扩展运算符的应用是对象的标准ECMAScript规范吗?