我正在为极度资源受限的嵌入式设备(http://www.espruino.com)编写一个 JavaScript 解释器,每次我认为我正确地实现了一些 JavaScript 时,我都意识到我错了。
我现在的问题是关于[]
. 您将如何正确实现 JavaScript 最基本的部分之一?
我查看了 JavaScript 规范,也许我没有找到正确的位,但我找不到有用的答案。
我之前假设您实际上有两个“映射”——一个用于整数,一个用于字符串。数组长度是最大整数加一的值。然而,这似乎是错误的,根据 jsconsole on chrome:
var a = [];
a[5] = 42;
a["5"]; // 42
a.length; // 6
但是也:
var a = [];
a["5"] = 42;
a[5]; // 42
a.length; // 6
所以......太好了 - 一切都被转换成一个字符串,并使用代表整数的最高值字符串(加一)来获得长度?错误的。
var a = [];
a["05"] = 42;
a.length; // 0
"05"
是一个有效的整数 - 即使是八进制。那么为什么它不影响长度呢?
您是否必须将字符串转换为整数,然后检查转换回字符串时是否匹配?
有没有人参考用于存储和获取数组或对象中项目的确切算法?看起来应该很简单,但看起来实际上并非如此!