【发布时间】:2018-01-25 21:30:45
【问题描述】:
在 python 中,我可以通过 ** (double-splat) 运算符传递其键与参数名称匹配的字典:
def foo(a, b):
print (a - b)
args = {'b': 7, 'a': 10}
foo(**args) # prints 3
如何在 ES6 中做同样的事情?这不起作用:
function foo(a, b) {
console.log(a - b)
}
args = {b: 7, a: 10}
foo(...args)
注意:我正在寻找一种不涉及更改 foo 签名的解决方案,因为我希望它以任何一种方式使用(有和没有解构)。所以以下应该工作:
foo(<magic>args);
foo(123, 456);
额外问题:为什么错误消息“未定义不是函数”?这里到底是什么未定义?
(正如 @Nina Scholz 在 cmets 中回答的那样,这是因为 ... 要求其参数具有 Symbol.iterator,这不是为对象定义的)。
【问题讨论】:
-
额外问题,对于对象,没有符号迭代器。
标签: javascript ecmascript-6 destructuring double-splat