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?

Object.keys(),Object.values(),Object.entries()

Object.entries()但是对象而不是数组

Babel 对 Object.entries 的支持

Object.entries() 数组变对象