https://eslint.org/docs/rules/no-prototype-builtins和https://stackoverflow.com/a/12017703/14731暗示:
Object.prototype.hasOwnProperty.call(foo, "bar")
等效于(并且比foo.hasOwnProperty("bar")
更安全但是在运行Chrome 75.0.3770.142时,我看到了:
Number.prototype.hasOwnProperty("toString") // true
Object.prototype.hasOwnProperty.call(Number, "toString") // false
问题:
答案 0 :(得分:2)
您实际上正在检查两个不同的内容:
true
将检查userid
对象的 prototype 是否包含Users
属性,并且该属性不是来自其原型链(具有拥有财产)。Number.prototype.hasOwnProperty("toString")
与Number
基本相同-它不是{em> 检查原型,而是toString
对象本身。这是两个不同的对象,在这里可以看到:
Object.prototype.hasOwnProperty.call(Number, "toString")
因此,原型是包含Number.hasOwnProperty("toString")
属性的内容,而Number
则继承了该属性。因此,为了进行等效检查,您需要检查原型:
console.log(Number === Number.prototype)