Javascript Object.keys()排序标准?
Javascript Object.keys()排序标准?,javascript,javascript-objects,Javascript,Javascript Objects,Object.keys()的官方订购标准是什么? 这不是订购的问题。这是一个超出标准的问题 考沙尔·雷格米写了: 首先,这些键是按数字升序排列的整数索引。 然后,所有其他字符串键,按照它们添加到对象的顺序。 最后,按符号键添加到对象的顺序显示所有符号键。 到目前为止还不错。如果将仅对象的整数作为键,则将以升序数字顺序保存在Object.keys()返回的数组中。如果键是唯一的字母,Object.keys()返回的数组的顺序与被调用的Object{}中的顺序相同。我的问题是:这是JavaScri
Object.keys()的官方订购标准是什么?
这不是订购的问题。这是一个超出标准的问题
考沙尔·雷格米写了:
首先,这些键是按数字升序排列的整数索引。
然后,所有其他字符串键,按照它们添加到对象的顺序。
最后,按符号键添加到对象的顺序显示所有符号键。
到目前为止还不错。如果将仅对象的整数作为键,则将以升序数字顺序保存在Object.keys()
返回的数组中。如果键是唯一的字母,Object.keys()
返回的数组的顺序与被调用的Object{}
中的顺序相同。我的问题是:这是JavaScript的通用和全球标准吗?问题是:它安全吗
接下来,这有一个小问题。(我不使用它)
编辑:特殊问题是将对象键作为引号中的整数:
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]
var object={“3”:“z”,“1”:“x”,“2”:“y”};
for(var i=0;i
正常情况下,“1”是字符串,1是整数,但作为对象键,“1”仍然是整数。(但不是通过对象键的数学运算实现的)。
顺便问一下,我的问题是,秩序中的官方标准是什么。这有多安全。如果对象键只有数字,javascript将按升序排列,如果没有按添加顺序排列
var obj1={'3':1,'2':3,'1':2};
var obj2={'3a':1,'2a':3,'1a':2};
log(JSON.stringify(obj1));
Object.keys(obj1).forEach(函数(键){console.log(键);});
log(JSON.stringify(obj2));
Object.keys(obj2.forEach(函数(键){console.log(键);})代码>主要是规范内部操作的包装。这反过来又表明
对属性的元素进行排序,使它们与迭代器生成的元素具有相同的相对顺序,如果使用O调用EnumerateObjectProperties内部方法,迭代器将返回这些元素
然后说
未指定枚举属性的机制和顺序,但必须符合下面指定的规则
从“以下”中,以下内容与您的问题相关:
- 返回的属性键不包括符号键
- 在任何枚举中,属性名称最多返回[…]
因此,根据规范,对于Object.keys()
,根本没有真正的排序保证。只是一些非常基本的不变量
这同样适用于EnumerateObjectProperties中最底层的语言的其他部分,尤其是
-
中的
与此形成对比的是,至少在年,它已经见底了。好了,命令是
- O的每个属性键P是一个数组索引,按升序数字索引顺序,do
- 每个对象都拥有O的属性键P,它是一个字符串,但不是数组索引,按属性创建的时间升序排列
- 每个属性都拥有O的属性键P,它是一个符号,按属性创建的时间升序排列
i、 对于该方法,有一个明确的顺序。(这同样适用于在OrdinaryOwnPropertyKeys中从底部开始的其他方法,例如
有一种方法试图在EnumerateObjectProperties顺序上指定更严格的限制,从而在
中为-指定更严格的限制。它的方法是找到涉及受限原型链和枚举的场景,在这些场景中没有任何奇怪的事情发生,并选择与Reflect.ownKeys()相同的顺序
对原型链中的每个级别都有。我对该建议的理解是,特别适用于Object.keys()
,它将使其行为与Reflect.ownKeys()相同
在普通对象上。看看我是否正确,如果正确的话,让它更明确。是的,顺序是按规定指定的。这个语法错误与您的问题有什么关系?{“3a”:…}
…Jonas Wilms:正常情况下“1”是字符串,1是整数,但作为对象键“1”仍然是整数。(但对于对象键的数学来说并非如此)。你的问题是关于对象文字的语法还是关于属性的顺序,还是真的是“在键的顺序中哪些属性名被认为是整数”还不清楚?Bergi:问题写在主题标题中。其余的是信息。排序是问题。在这种情况下,它似乎是我们关于主题的规范问题的重复,在那里你可以找到引用和标准的链接。实际上var obj1={3:1,2:3,1:2}
也很好。只有当你把数字和字母混合在一起时才可以。如果是整数,用引号把键括起来是个好主意,但它会在任何地方都作为整数处理,而不是字符串。我已经展开了我的问题。正常情况下,“1”是字符串,1是整数,但对象键“1”仍然是整数。(但通过对象键的数学运算不能实现)。正常情况下“1”是字符串,1是整数,但对象键“1”仍然是整数。(但通过对象键的数学运算,这并不真实)。非常感谢Domenic。我认为正确答案在9.1.11.1 OrdinaryOwnPropertyKeys第3点中。:“是字符串,但不是数组索引”。问题是,对象中的键始终是整数,因为迭代器可以枚举。字符串与否并不重要。问题是,为什么只有整数?[a-zA-Z]也可以枚举(字符Unicode数字或位),但不是在JS中?对象将整数作为整数处理所有键,包括字符串。这是另一个问题:var object={1:“a”,“1”:“b”};object.keys(object);//[“1”]
“包括字符串”:包括字符串中的整数。PS:array.sort()
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]
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]