Ane*_*apu 15 javascript node.js
枚举javascript对象的键按插入顺序重放键:
> for (key in {'z':1,'a':1,'b'}) { console.log(key); }
z
a
b
Run Code Online (Sandbox Code Playgroud)
这不是标准的一部分,但被广泛实施(如讨论这里):
ECMA-262未指定枚举顺序.事实上的标准是匹配V8也有的插入顺序,但有一个例外:
V8不保证数组索引的枚举顺序(即,可以解析为32位无符号整数的属性名称).
在构造Node.js库时依赖此行为是否可以接受?
mae*_*ics 13
绝对不! 这不仅仅是一种风格问题,而是一种正确性问题.
如果您依赖于这个"事实上的"标准,您的代码可能会在ECMA-262 5th Ed上失败.兼容的解释器,因为该规范没有指定枚举顺序.此外,V8引擎可能会改变其未来的行为,例如,为了表现的利益
绝对不要依赖键的顺序.如果标准没有指定订单,那么实现可以随意执行.散列表通常是这些对象的基础,你无法知道何时可以使用它们.Javascript有很多实现,它们都是竞争最快的.密钥顺序将在实现之间变化,如果不是现在,则在将来.
| 归档时间: |
|
| 查看次数: |
2901 次 |
| 最近记录: |