问题:同上。谢谢
var obj = { "b1" : "a", "b2" : "b2", 7: "c", 4: 'dd'};
console.log(Object.keys(obj)); //输出["4", "7", "b1", "b2"]
问题:同上。谢谢
var obj = { "b1" : "a", "b2" : "b2", 7: "c", 4: 'dd'};
console.log(Object.keys(obj)); //输出["4", "7", "b1", "b2"]
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
这里有Object.keys
的文档
首先 Object.keys
和 for in
顺序没任何区别
// 数字开头的key 合理?
var obj = { "b1" : "a", "b2" : "b2", 7: "c", 4: 'dd'};
// 如果这样你再试试?你说的排序不成立了吧~!!!!!!!!!~
var obj = { "b3" : "a", "b2" : "b2", 7: "c", 4: 'dd'};
答案很简单只有数字的部分会放到最前面然后排序 其他部分会放到后面 这只是js的处理机制,
根据一般的代码规范你这样使用本身就不合理~有些语言直接报错~
可以参看 这个书的介绍 http://exploringjs.com/es6/ch_oop-besides-classes.html#sec_iterating-property-keys
Object.keys()
和 for...in
输出顺序一样
输出顺序规则为:
按(integer indices)升序输出
按添加顺序输出字符串key
按添加顺序输出
Symbol
key (es6 中新加的)integer indices : 是指将key转化为53bit的无符号整型,然后再转会字符串 后依旧相等的 key。如 '10', '2' 为integer indices。 '01', '12a' 不是 integer indices。
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
根据 MDN 上的解释
Object.key 的顺序是根据
for...in
决定的规范里说到
而且
Object 是个无序的集合
所以应该是各个浏览器实现
for...in
Object 的结果吧这里也有一些讨论
http://stackoverflow.com/questions/280713/elements-order-in-a-for-in-loop
http://stackoverflow.com/questions/30076219/does-es6-introduce-a-well-defined-order-of-enumeration-for-object-properties