Firefox 与其他浏览器中的 Javascript 自动排序

标签 javascript firefox

最近我在 Firefox 中发现了这种奇怪的行为:

此代码自动对属性进行排序:

var an_obj = { "4": "d", "1": "a", "2": "c"};
alert(Object.keys(an_obj)); // will alert "1, 2, 4"

虽然这个不是:

var value2 = {"1003":1, "1001":2, "1000":3};
alert(Object.keys(value2));// will alert "1003, 1001, 1000"

任何大于 1000 的数字在 Firefox 中都会有不同的行为,而其他浏览器(Chrome、IE11)将按照预期的大于 1000 的自动排序数字运行。

我认为这是 FireFox 中的一个错误,我错了吗?

更新1

这使得同一 FireFox 实现中的顺序“不可预测”。我可以理解根本没有对值进行排序或根据一个标准进行排序,但在“任意”数字之后不会表现出“不可预测”的行为。

最佳答案

这不是一个错误。对象不保证其属性的任何顺序,并且在某些情况下不应依赖 Object.keys 的任何顺序。

§15.2.3.14 ECMAScript 5 standard中有说明关于Object.keys

If an implementation defines a specific order of enumeration for the for-in statement, that same enumeration order must be used in step 5 of this algorithm.

这意味着 for-in 语句和 Object.keys 的任何排序完全取决于实现。

关于Firefox 与其他浏览器中的 Javascript 自动排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21027971/

相关文章:

javascript - 控制台跨域Postmessage示例

javascript - 使 jquery Accordion 默认为关闭

javascript - 响应 jquery 改变宽度

java - 尝试获取范围 com.google.api.server.spi.config.scope.SingleAuthScopeExpression 的客户端 ID,但失败

javascript - 在 Firefox 中检测关闭窗口事件

html - 跨浏览器的不同页面 View

javascript - 找不到 Angular.js angular-dragdrop 自定义回调函数

javascript - 如何使我无法更改的 javascript 函数出现并在网站上播放

javascript - SVG 鼠标事件在 Firefox4 中有效,但在 IE8 中无效

css - 在不使用 JS 的情况下防止图像可拖动或可选择