我正在从一个可映射函数初始化一个新数组:
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);
就足够了(前提是平台支持let
和Array.from
)。
关于javascript - JS : Array has no method 'keys' (Cordova, 安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47312437/