TypeError:Object.entries 不是函数
Posted
技术标签:
【中文标题】TypeError:Object.entries 不是函数【英文标题】:TypeError: Object.entries is not a function 【发布时间】:2017-10-07 02:37:29 【问题描述】:为什么我在尝试运行 Node.js/Express 服务器时不断收到此错误消息?
这是新版 ES7 的一部分吗?我需要什么才能使用这些新功能运行应用程序?
【问题讨论】:
你有哪个版本的节点? Node v7 显然:node.green/… ...或任何广泛可用的 polyfills。不,它不是 ES7 的一部分。 Object.entries 是 ECMAScript 2018 的一部分,我猜它是 ed 9(当前版本是 ECMA-262 ed 7 或 ECMAScript 2016,下一个是 ECMAScript 2017)。不过最近的版本好像去掉了版本号,最新的草稿就是ECMAScript 2018。 没有“较新的 ES7”这样的东西。 ES7 于去年发布。您所问的通常称为“ES next”(下一个,即将推出的功能)。 @RobG:根据github.com/tc39/proposals/blob/master/finished-proposals.md,它应该包含在今年的版本中。 【参考方案1】:在 mdn 文档上,Object.entries 上有一个明确的教程,并且在同一页面中的部分 PolyFill 上描述了如果 Object.entries 不支持该怎么办。
要在本机不支持的旧环境中添加兼容的 Object.entries 支持,您可以在 tc39/proposal-object-values-entries 中找到 Object.entries 的演示实现(如果您不需要任何支持对于 IE),es-shims/Object.entries 存储库中的一个 polyfill,或者您可以使用下面列出的简单、可部署的 polyfill。
if (!Object.entries) Object.entries = function( obj ) var ownProps = Object.keys( obj ), i = ownProps.length, resArray = new Array(i); // preallocate the Array while (i--) resArray[i] = [ownProps[i], obj[ownProps[i]]]; return resArray; ;
【讨论】:
这个问题是条目根据插入顺序对数组进行排序,而键有不同的排序方式。【参考方案2】:根据Object静态方法下的http://kangax.github.io/compat-table/es2016plus/,看来你需要启用和谐标志
所以像这样运行节点
node --harmony script.js
【讨论】:
“Harmony”不应该是 ECMAScript 2015 aka ECMA-262 ed 6 吗?还是现在只是指最新的(可能仍处于草案中)功能? 鉴于 Object.entries 似乎是 ES2017 功能,和谐标志现在代表几乎完整但不被认为稳定的功能。见这里:nodejs.org/en/docs/es6 也许他们应该考虑将标志设置为--latest
或类似的东西。也少了一个要输入的字符。 ;-)【参考方案3】:
您可以使用babel-polyfill
快速解决问题
npm install babel-polyfill
import 'babel-polyfill';
【讨论】:
这对我不起作用,我完全按照文档进行操作。在发布之前,您应该确保您的答案确实有效。【参考方案4】:万一这对其他人有帮助......
更新您的 Node.js 版本。我正在运行节点 6.x,在我更新到节点 8.x+ 后这个问题自行解决了
【讨论】:
我的 SublimeLinter 在运行时出现此错误,我通过更新节点(有 6.2.2)并确保 SublimeLinter 的设置指向新版本(10.15.1)来解决它。 是的,老版本的节点肯定是这个功能无法识别的问题【参考方案5】:首先安装 react-app-polyfill:
npm install react-app-polyfill
然后在导入 React 之前导入到 index.jsx 的顶部:
import 'react-app-polyfill/stable';
【讨论】:
【参考方案6】:就我而言,当我从节点 11.15.0
切换到 lts/erbium
/ 12.18.3
时,它自行解决了。
【讨论】:
【参考方案7】:代替
const myObj = a: 1, b: 2
myObj.entries()
做
Object.entries(myObj)
【讨论】:
以上是关于TypeError:Object.entries 不是函数的主要内容,如果未能解决你的问题,请参考以下文章
Object构造函数的方法 之Object.entries()
如何在 Typescript 中输入 Object.entries() 和 Object.fromEntries?