开发者问题收集

Node6 中 object.assign 使用剩余参数时出现错误

2019-09-24
129

我使用 object.assign 和 rest 参数来帮助转换和组织我的数据,然后再显示在 UI 中。我曾经在客户端/浏览器上运行下面的这个块,它运行良好,但现在移动到服务器端失败了。

Object.assign(objectA, ...objectB);

两者都是对象,objectB 是 null

我正在运行 Node v 6.11.5,此行报告的错误消息是

TypeError: undefined is not iterable

环顾四周,似乎 Node6 不能很好地支持这些运算符,我该怎么做呢

  • 让它在 Node6 中工作
  • 以更受支持的形式重写此行?
2个回答

此错误与 Node 6 无关。在 Node 5 到 12 的任何版本中(以及可能所有未来版本),您都会遇到相同的错误。

错误消息非常清楚:

TypeError: undefined is not iterable

您只能在可迭代对象(如数组)上使用扩展运算符,但 objectBundefined ,这是不可迭代的。

如果您不希望 objectBundefined ,那么您在此代码之前的某个地方就有一个错误。如果您有时预计 objectBundefined ,那么您可以通过几种方式修复它。如果 objectB 是函数参数,则可以为其指定默认值:

function myFunction(objectA, moreObjects = []) {
  // ...
  Object.assign(objectA, ...moreObjects);
}

...或者,只需确保在使用它的行上它不是 undefined

const objectA = { foo: 1 };
let couldBeUndefined;

const result = Object.assign(objectA, ...(couldBeUndefined || []));

console.log(result);

但是,您应该明确停止使用如此老旧的 Node 版本。Node 6 不再维护 (即没有安全更新)。 推荐给大多数用户 的版本是 10.16。

Jordan Running
2019-09-24

使用 Object.assign polyfill

然后,假设 ObjectB 是一个数组:

Object.assign.apply(Object, [objectA].concat(objectB || []));
patstuart
2019-09-24