javascript - JS : Array has no method 'keys' (Cordova, 安卓)

标签 javascript android arrays cordova

我正在从一个可映射函数初始化一个新数组:

let data = Array.from(Array(20).keys(), new_datum);

它得到 webpack'd (v 3.5.5) 到:

var data = Array.from(Array(20).keys(), new_datum);

为了完整起见,这里是那个函数,尽管我怀疑它是否相关:

function new_datum() {
  return {
    name: Math.floor((Date.now() - START_TIME) / 1000),
    Temperature: Math.random() * 100
  }
}

这在我的桌面版 Chrome 浏览器中运行良好。但是,当使用 Cordova (v 7.1.0) 和 Android (26) 将其编译为 SDK 并在我的手机(kitkat 4.4.4、Chrome 56.0.2924.87)上运行时,我得到以下信息:

Uncaught TypeError: Object [object Array] has no method 'keys' 

我的直觉是,“某种 ECMA6”,因为 Array.keys()方法很新,但由于我对 JS 还很陌生,所以我很困惑。

编辑:另外,查看 App 的 userAgent:

5.0 (Linux; Android 4.4.4; XT1080 Build/SU6-7.7) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 

我看到 Cordova 出于某种奇怪的原因正在使用 Chrome 33。这可能是问题所在。

附录:

由于我确认 Cordova 应用程序确实在使用 Chrome 33,这可能是数组方法无法正常工作的原因。

看起来有一些limitations with respect to WebView因此 Cordova chrome 版本。有workarounds ,但我怀疑最简单的方法就是为 Chrome 33 开发应用程序。

最佳答案

你是对的,错误告诉你你正在运行该代码的平台使用的 JavaScript 引擎不提供 Array.prototype.keys,这是截至ES2015(所以,并不是那么新)。 Chrome 在 v56 之前就已经有了它,因此您运行该代码的环境不是 Chrome 56。我认为您可能是对的,您的代码是由 Chrome 33 运行的。

您唯一的选择是升级平台或不在您的代码中使用Array.prototype.keys。如果你走后一条路,我会对 ES2015 中的许多其他新事物持怀疑态度。


作为Andy points out ,无论如何都没有理由使用 Array#keys 。只是

let data = Array.from(Array(20), new_datum);

let data = Array.from({length:20}, new_datum);

就足够了(前提是平台支持letArray.from)。

关于javascript - JS : Array has no method 'keys' (Cordova, 安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47312437/

相关文章:

在 C 中更改二维动态数组的大小

javascript - cursor.map().toArray() 与 cursor.toArray().then(array => array.map())

android - 升级到 SDK 2.3 - 现在没有仿真器具有连接性

Javascript 从现有的属性值拆分创建数组

java - 使用 C/C++ 进行 Android 开发是否比 Java 更快?

android - 如果使用 android 工具来重命名包名称而不会出现任何错误/冲突

android - Kotlin 按钮数组

Javascript 检查键盘输入

javascript - 如何在 Javascript 中计算总小时数?

javascript - 弄清楚为什么 Date.parse() 不等于比较日期