You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ECMA规范中Array.sort的‘不存在属性值’指什么?

JavaScript数组排序中undefined属性与不存在属性的区分疑问

在StackOverflow的一篇关于JavaScript数组排序含undefined值的回答中,引用了ECMA规范15.4.4.11的内容:不存在的属性值始终比undefined属性值大,undefined比其他值大,因此undefined属性值排在排序结果末尾,之后是不存在的属性值。查看最新ECMA 13.0规范的Array.sort备注,内容与2011年版本基本一致。

核心疑问在于:读取对象不存在的属性会得到undefined,那排序时如何区分数组中存在的undefined属性和不存在的数组索引属性?

  • 调用sort时,无论无参数还是传入自定义比较函数,比较函数读取不存在的属性只能拿到undefined,看起来sort并没有办法直接检测属性是否存在。
  • 在规范定义sort的SortIndexedProperties伪代码中,存在HasProperty相关逻辑,猜测这是不是为了处理排序过程中数组被比较函数修改,导致属性被移除的场景?
  • 另外,ECMA规范中定义“不存在的属性”是不可扩展目标上不存在的自有属性,调用[[GetOwnProperty]]会返回undefined,这进一步加深了对二者区分逻辑的疑问。

内容的提问来源于stack exchange,提问作者quetzalcoatl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:39:20