Object.prototypes встроенные непосредственно правила - PullRequest
0 голосов
/ 20 декабря 2018

При проверке типов переменных для предотвращения сбоя приложения я всегда использую

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

Однако недавно я добавил новый пакет linting и выдает ошибку в этой строке, говоря, что следующая строка лучше

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

Когда я нажимаю на ошибку, она показывает это объяснение, которое я не до конца понимаю:

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

Так почему второй вариант лучше первого?

Спасибо

1 Ответ

0 голосов
/ 20 декабря 2018

Правило говорит вам использовать

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...