Chrome 不维护对象字面量中键顺序的唯一实例似乎是键是数字的。
var properties = ["damsonplum", "9", "banana", "1", "apple", "cherry", "342"];
var objLiteral = {
damsonplum: new Date(),
"9": "nine",
banana: [1,2,3],
"1": "one",
apple: /.*/,
cherry: {a: 3, b: true},
"342": "three hundred forty-two"
}
function load() {
var literalKeyOrder = [];
for (var key in objLiteral) {
literalKeyOrder.push(key);
}
var incremental = {};
for (var i = 0, prop; prop = properties[i]; i++) {
incremental[prop] = objLiteral[prop];
}
var incrementalKeyOrder = [];
for (var key in incremental) {
incrementalKeyOrder.push(key);
}
alert("Expected order: " + properties.join() +
"\nKey order (literal): " + literalKeyOrder.join() +
"\nKey order (incremental): " + incrementalKeyOrder.join());
}
在 Chrome 中,上述生成:“1,9,342,damsonplum,banana,apple,cherry”。
在其他浏览器中,它会生成“damsonplum,9,banana,1,apple,cherry,342”。
因此,除非您的密钥是数字,否则我认为即使在 Chrome 中,您也是安全的。如果你的键是数字的,也许只是在它们前面加上一个字符串。