For..in...和Object.keys之后的输出顺序
在做Excel表格读取数据的时候,需要将数据转换为数组,因为不知道for..in ..的遍历会有自动排序的作用,所以代码看得挺蒙的。
经查资料,for..in..的object类型的输出按如下规律:
- 如果是纯数字的话,会按数字排序后按照数字顺序输出;
- 包含正数和其他的object的键,会按照正数顺序先排列输出,再输出其他项;
- 包含负数,-号识别为字符。
后面看到了有Object.keys的数据转换,查了一下,这个也会对object进行键排序:
(参考:https://zhuanlan.zhihu.com/p/40601459,写得很好)
总结的情况:
上面这个规则不光规定了不同类型的返回顺序,还规定了如果对象的属性类型是数字,字符与Symbol混合的,那么返回顺序永远是数字在前,然后是字符串,最后是Symbol
文章举的例子:
Object.keys({ 5: '5', a: 'a', 1: '1', c: 'c', 3: '3', b: 'b' }) // ["1", "3", "5", "a", "c", "b"]
排序规则同样适用于下列API: