【发布时间】:2020-02-16 23:10:14
【问题描述】:
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”仍然是一个整数。 (但不是真正通过对象键进行数学运算)。
顺便说一句,我的问题是,订单中的官方标准是什么。以及这有多安全。
【问题讨论】:
-
是的,订单按规定指定。该语法错误与您的问题有什么关系?
{ "3a": ... }... -
Jonas Wilms:通常“1”是一个字符串,1 是一个整数,但作为对象键“1”仍然是一个整数。 (但不是真正通过对象键的数学运算)。
-
目前还不清楚您的问题是关于对象文字的语法还是关于属性的顺序。或者问题真的是“哪些属性名称在键的排序中被视为整数?”?
-
Bergi:问题写在主题标题中。剩下的就是信息。订购是个问题。
-
在这种情况下,它似乎与我们关于该主题的规范问题重复,您可以在其中找到标准的引用和链接。
标签: javascript javascript-objects