无效原型值¶
ID: js/invalid-prototype-value
Kind: problem
Security severity:
Severity: error
Precision: high
Tags:
- correctness
- language-features
- external/cwe/cwe-704
Query suites:
- javascript-security-and-quality.qls
所有 JavaScript 对象(包括函数、类和数组)都具有原型,原型要么是 null
,要么是另一个对象。对象的原型可以通过两种方式设置,这两种方式都防止尝试分配无效原型(如原始值)
将值分配给对象的
__proto__
属性;如果该值不是有效的原型,则分配会被静默忽略。使用标准库函数
Object.create
或Object.setPrototypeOf
;无效原型值会导致运行时错误。总之,任何尝试将对象的原型设置为非对象或null
的值都将无效,并可能导致运行时错误。
建议¶
通过提供有效的原型值来修复原型赋值。
示例¶
以下代码尝试创建一个原型为 undefined
的对象,这将导致运行时错误
let dict = Object.create(undefined);
如果意图是创建一个没有原型对象的物体,则应使用 null
代替
let dict = Object.create(null);