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

ES5严格模式下同名属性与getter/setter共存是否报错?

ES5严格模式下同名普通属性与getter/setter的冲突问题

在ES5严格模式中,对象字面量里同时定义同名的普通属性和getter/setter方法会直接抛出语法错误。

ES5规范明确规定:严格模式下,对象字面量中不允许出现多个同名的属性定义(无论这些属性是普通数据属性还是访问器属性)。这种设计是为了避免歧义写法,强制开发者明确属性的定义方式。非严格模式下浏览器可能会静默覆盖前面的定义,但严格模式会直接报错阻止代码执行。

针对你提到的几个问题补充说明:

  • ES5环境的获取:可以通过几种方式测试ES5代码:使用旧版本Node.js(如0.12.x版本,原生支持ES5且默认不启用ES6特性);或者在Chrome开发者工具中,通过设置禁用ES6+特性;也可以用Babel将代码转译为ES5后在现代环境运行,观察执行结果。
  • ES6的差异:ES6放宽了同名属性的限制,允许对象字面量中出现同名定义,后面的属性会覆盖前面的。这也是你测试时不同顺序得到不同结果的原因:
    • 示例1中,普通属性p: 5定义在getter之后,直接覆盖了之前的访问器属性,因此obj.p最终是5。
    • 示例2中,处理顺序是先定义getter,再用普通属性覆盖为数据属性,最后定义setter时,会将数据属性转换为访问器属性,但此时getter已经被覆盖丢失,所以读取obj2.p时因没有对应的getter逻辑,返回undefined。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:07:51