对象的JavaScript扩散运算符不起作用?这是预期的行为吗?

时间:2017-04-04 13:47:31

标签: javascript ember.js ecmascript-6 babeljs

对象的扩展运算符(...)无法正常工作,如下面的代码所示。这是预期的行为吗? 在jsbin

中试用
//var test ={start:'stating',end: 'ending'}; //its not working
var test=['start-value','end-value']; //its working
function display(start,end){
  console.log(start,end);
}
display(...test)

提出这个问题背后的原因是,我在下面的代码行中看到了使用扩展运算符的对象,但它对我不起作用。

https://github.com/josemarluedke/ember-cli-daterangepicker/blob/master/addon/components/date-range-picker.js#L203

我是否缺少任何配置才能使其正常工作?

2 个答案:

答案 0 :(得分:4)

来自文档:

Only for iterables

Note that the spread operator can be applied only to iterable objects:

var obj = {'key1': 'value1'};
var array = [...obj]; // TypeError: obj is not iterable

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

答案 1 :(得分:2)

我猜你期待从对象中获取正确的值作为函数参数。您可以使用扩展运算符,但首先必须将对象交换为可迭代的对象,例如array

var test = {
  start: 'stating',
  end: 'ending'
}

function display(start, end) {
  console.log(start, end);
}
display(...Object.keys(test).map(v => test[v]));