Object.prototypes内置直接规则

时间:2018-12-20 09:18:21

标签: javascript ecmascript-6 eslint

当类型检查变量以防止应用崩溃时,我总是使用

var hasBarProperty = foo.hasOwnProperty("bar");

但是我最近添加了一个新的棉绒包装,并在该行上抛出了一个错误,说下面的行更好

var hasBarProperty = Object.prototype.hasOwnProperty.call(foo, "bar");

当我单击错误时,它会显示我不完全理解的解释,

https://eslint.org/docs/rules/no-prototype-builtins?fbclid=IwAR30-Z0mV40SaIPn0rPNUuyh2J3qJcsb8pE5GhNhTtZUE-sbYfLBcLNTeuM

那么第二个为什么比第一个更好?

谢谢

1 个答案:

答案 0 :(得分:2)

规则告诉您使用

var hasBarProperty = Object.prototype.hasOwnProperty.call(foo, "bar");

而不是

var hasBarProperty = foo.hasOwnProperty("bar");

由于foo被覆盖hasOwnProperty可能不可靠:

var foo = {
  hasOwnProperty: function() {
    return true;
  }
};
console.log(Object.prototype.hasOwnProperty.call(foo, "bar")); // false
console.log(foo.hasOwnProperty("bar"));                        // true