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
您只能在可迭代对象(如数组)上使用扩展运算符,但
objectB
是
undefined
,这是不可迭代的。
如果您不希望
objectB
是
undefined
,那么您在此代码之前的某个地方就有一个错误。如果您有时预计
objectB
是
undefined
,那么您可以通过几种方式修复它。如果
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
然后,假设 ObjectB 是一个数组:
Object.assign.apply(Object, [objectA].concat(objectB || []));
patstuart
2019-09-24