【发布时间】:2018-04-28 23:23:57
【问题描述】:
我正在从一个可映射函数初始化一个新数组:
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 还是很陌生,所以我很难过。
编辑:另外,查看应用程序的 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,这可能是 Array 方法无法正常工作的原因。
看起来有一些 limitations with respect to WebView 和 Cordova chrome 版本。有workarounds,但我怀疑最简单的方法就是为 Chrome 33 开发应用程序。
【问题讨论】:
-
FWIW 如果有帮助,我会从
let data = Array.from(Array(20), new_datum);获得与let data = Array.from(Array(20).keys(), new_datum);相同的输出。 -
“这是否意味着 Cordova 实际上在使用 Chrome 33?” 我会这么说,是的。 Chrome 56 绝对支持
Array.prototype.keys(以及之前的许多版本。)
标签: javascript android arrays cordova