Object.keys()排序标准?

马拉马

的官方订购标准是Object.keys()什么?
这不是订购的问题。这是一个超出标准的问题。

Kaushal Regmi 写道:

首先,作为升序数字索引的整数索引的键。然后,所有其他字符串键(按它们添加到对象的顺序)。最后,所有符号键(按它们添加到对象的顺序)。https://stackoverflow.com/a/57929312/10617101

到现在为止还挺好。如果对象只有整数作为键,则将按升序将其保存在Object.keys()返回的数组中。如果键只是字母,则Object.keys()返回的数组的顺序与被调用的顺序相同object{}我的问题是:这是JavaScript的通用通用标准吗?问题是:安全吗?

接下来,有一个小问题。(我不用这个)。

var object = { 3a: 'z', 1a: 'x', 2a: 'y' };
for (var i = 0; i < Object.keys(object).length; i++) {
console.log(Object.keys(object)[i]);
}
// Firefox: SyntaxError: identifier starts immediately after numeric literal
// Chrome: Uncaught SyntaxError: Invalid or unexpected token
var object = { a3: 'z', a1: 'x', a2: 'y' };
for (var i = 0; i < Object.keys(object).length; i++) {
console.log(Object.keys(object)[i]);
}
// works on both: [a3, a1, a2]

是的,解决方案是,使用另一种方法来创建object{}

var object = {};
object["3a"] = 'z';
object["1a"] = 'x';
object["2a"] = 'y';
for (var i = 0; i < Object.keys(object).length; i++) {
console.log(Object.keys(object)[i]);
}
// [3a, 1a, 2a]

编辑:特殊的问题是对象关键字作为引号中的整数:

var object = { "3": "z", "1": "x", "2": "y" };
for (var i = 0; i < Object.keys(object).length; i++) {
console.log(Object.keys(object)[i]);
} // [1, 2, 3]

通常,“ 1”是字符串,而1是整数,但是作为对象键“ 1”仍然是整数。(但不是真正通过对象键进行数学运算)。
因此,顺便问一下我的问题,订单中的官方标准是什么。以及这有多安全。

多米尼克

规范Object.keys()很大程度上是对规范内部操作EnumerableOwnPropertyNames的包装反过来,这说明

对属性的元素进行排序,以使它们具有与Iterator产生的相对顺序相同的相对顺序(如果使用O调用EnumerateObjectProperties内部方法,则返回该迭代器)。

EnumerateObjectProperties然后说

未指定枚举属性的机制和顺序,但必须符合以下指定的规则。

并从下面的内容中,找到与您的问题有关的以下内容:

  • 返回的属性键不包括作为符号的键。
  • 在任何枚举中,属性名称最多将返回一次。

因此,根据规格,根本没有的真正订购保证Object.keys()只是一些非常基本的不变式。

这对适用于EnumerateObjectProperties的语言的其他部分也适用,尤其是for- in


与此形成鲜明对比的Reflect.ownKeys()是,至少对于普通对象而言,它在OrdinaryOwnPropertyKeys中达到最低在那里,命令是

  • O的每个自己的属性键P(它是数组索引),按数字索引升序执行
  • O的每个自己的属性键P(按字符串排列,但不是数组索引),按属性创建的时间顺序升序排列
  • O的每个自身属性键P(即符号),按照属性创建的时间顺序升序排列

即对于该方法,有一个明确规定的顺序。(这同样适用于OrdinaryOwnPropertyKeys中触底的其他方法,例如Object.getOwnPropertyDescriptors()


当前有一个积极的建议,试图对EnumerateObjectProperties顺序(因此对for-)指定更严格的限制in它的方法是找到涉及受限原型链和枚举的场景,其中没有奇怪的事情发生,并Reflect.ownKeys()为原型链中的每个级别选择与执行相同的顺序我对建议的理解是,专门应用于Object.keys(),它将使其行为与Reflect.ownKeys()普通对象相同我在提案中提出一个问题,以查看我是否正确,如果是正确的话,则使其更加明确。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

方法Object.keys如何对字符串的键ID进行排序

来自分类Dev

List <Object>的排序

来自分类Dev

排序列表<Object []>

来自分类Dev

get keys of self object

来自分类Dev

Multiple same keys in the JavaScript object

来自分类Dev

NodeJS object.keys错误

来自分类Dev

如何使用 Object.keys()?

来自分类Dev

如何从指令模板访问Object.keys(object).length?

来自分类Dev

Object.keys(object).map() 不返回键

来自分类Dev

访问VBA多个排序标准

来自分类Dev

按列对ArrayList <Object []>进行排序

来自分类Dev

使用数组对list <object>进行排序

来自分类Dev

排序字典<object,List <int >> c#

来自分类Dev

按JavaScript中Object的属性值排序?

来自分类Dev

对未知 object.property WPF 排序

来自分类Dev

使用 Java 对 Object.String 进行排序

来自分类Dev

无法在angularjs中调用Object.keys

来自分类Dev

为什么Object.keys()和for ...不同?

来自分类Dev

相当于Object.keys的Dojo

来自分类Dev

Object.keys执行时间

来自分类Dev

JavaScript Object.keys返回空数组

来自分类Dev

为什么Object.keys比hasOwnProperty快?

来自分类Dev

Object.keys等效lodash方法

来自分类Dev

根据计数中断Object.keys循环

来自分类Dev

映射获取的数据而不是Object.keys()

来自分类Dev

Object.keys及其值的数组循环

来自分类Dev

使用Object.keys的对象数组

来自分类Dev

使用Object.keys()打印属性

来自分类Dev

Object.keys() 的用法等价于 for in 循环?