覆盖属性¶
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
在 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.