CodeQL 文档

覆盖属性

ID: js/overwritten-property
Kind: problem
Security severity: 
Severity: error
Precision: very-high
Tags:
   - reliability
   - correctness
   - external/cwe/cwe-563
Query suites:
   - javascript-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

在 ECMAScript 2015 及更高版本以及 ECMAScript 5 非严格模式中,对象字面量可以多次定义相同的属性,后面的定义会覆盖前面的定义。特别是,如果最后定义分配的值与前面的定义不同,则前面的值会丢失,这很可能是无意的,应该避免。

建议

将属性重命名为不同的名称。

示例

在以下示例中,分配给 point 的对象字面量有两个 x 属性定义。该对象在函数 dist 中的使用表明第二个定义应该定义一个名为 y 的属性,并且应该重命名。

function dist(p) {
	return Math.sqrt(p.x*p.x+p.y*p.y);
}

var point = {
	x: 3,
	x: 4
};
console.log(dist(point));

参考资料

  • Ecma International,ECMAScript 语言定义,第 5.1 版,附录 C. ECMA,2011。

  • Ecma International,ECMAScript 语言定义,第 6 版,附录 E. ECMA,2015。

  • 通用弱点枚举:CWE-563.

  • ©GitHub, Inc.
  • 条款
  • 隐私