Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Object.keys()排序标准?_Javascript_Javascript Objects - Fatal编程技术网

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]