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

 Nedo_zou 发布于 2023-02-04 19:00

最近我在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的相同实现中"不可预测".我可以理解不完全排序的值或者相应地排序一个标准,但在"任意"数字之后不能表现为"不可预测".

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

    关于这一点,在§15.2.3.14ECMAScript 5标准中说明了Object.keys这一点

    如果实现为for-in语句定义了特定的枚举顺序,则必须在此算法的步骤5中使用相同的枚举顺序.

    这意味着该for-in语句的任何排序,并Object.keys完全依赖于实现.

    2023-02-04 19:02 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有