ES6 中的确定性属性枚举
问题:
尽管引入了属性顺序,ES6 是否引入了属性顺序保证枚举所有对象属性的明确顺序操作?
答案:
ES2015-ES2019:
否,对于某些操作,例如 for-in、Object .keys 和 JSON.stringify,ES6 不强制执行特定的枚举顺序。这是由于向后兼容性问题。
使用 [[Enumerate]] 方法的 for-in 循环,根据 ECMAScript 规范具有未定义的枚举顺序。
Object.keys 还允许为 for-in 语句定义自定义枚举顺序的实现。
ES2020 和稍后:
从 ES2020 开始,即使对于 for-in 和 Object.keys 等遗留操作,也必须遵守属性顺序。
具有定义顺序的其他操作:
ES6中的一些其他操作,例如Object.getOwnPropertyNames, Object.getOwnPropertySymbols 和 Object.defineProperties 遵循普通对象的属性创建顺序。此顺序为:
例外:
但是,某些外来对象(例如代理)可能会定义自己的 [[OwnPropertyKeys]] 方法来修改枚举顺序。
以上是ES6 是否保证所有操作的属性枚举顺序一致?的详细内容。更多信息请关注PHP中文网其他相关文章!