array.sort() 是否就地,即使在 Object.keys() 上操作也是如此
Is array.sort() in-place even when operating on Object.keys()?
JavaScript
数组的.sort()
方法就地修改数组并返回对数组的引用。
Object.keys(obj)
获取一个数组,其中包含对象 obj
的所有键。
JavaScript 中,对象键在标准中声明为不按任何特定顺序排列。
因此,这两个"规则"似乎相互冲突:"array.sort()
就地"与"对象键未排序"。
当我们打电话给Object.keys(obj).sort()
时,会发生以下哪项?
- 对象的键已就地排序,如果不修改对象,则保持排序?
- 是否创建并排序了对象键数组的临时匿名副本?
- 别的?
这是否记录在标准中,还是因实施而异?
答案是第二个:创建并排序对象键数组的临时匿名副本。
ecma 规范规定,Object.keys
的结果值每次都必须是数组的新实例。这意味着生成的数组不受对象的实际键的支持,它不像Java的keySet,它只是一个副本。
JavaScript 中的对象没有顺序。您可以对对象的键进行排序并获取对象键的数组,但不能对对象进行排序。
var test = {'a': 12, 'c': 99, 'b': 8, 'd': 15};
console.log(Object.keys(test).sort());
// outputs: ["a", "b", "c", "d"]
// but test still remains as: Object {a: 12, c: 99, b: 8, d: 15}
Object.keys(test).sort()
按顺序给出"a"、"b"、"c"和"d"的数组,但对象仍然保持随机顺序(基于用户的浏览器)。
换句话说,当您调用 Object.keys(test).sort()
时,将创建并排序对象键数组的临时匿名副本,并且对象保持不变。
JS很可能会创建对象数组的临时匿名副本,并对其进行排序。
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- 如何确定javascript已经完成了某些操作.ios上的
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 函数未在Object.keys或Object.getOwnPropertyNames下列出,但可以调用
- 从JavaScript访问struts操作中的属性
- fluxxor向一个flux实例添加一组以上的操作
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 操作放置在画布上的元素之间的连接
- 使用“+="操作人员
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- Jquery未定义函数正在停止其他操作
- 如何操作iframe之外的元素
- javascript对象操作:根据指定条件选择属性
- jQuery:暂停按钮可以暂停所有其他操作
- 用于选择/文本框操作的JavaScript
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- 通过javascript操作图像,非常简单
- 将文本框中的值用于按钮窗体操作上的变量
- array.sort() 是否就地,即使在 Object.keys() 上操作也是如此