Использование неправильных способов приведет к обманчивым результатам.

Гибкость - не всегда хорошо.

JavaScript гибкий. Это дает вам возможность кодировать более свободно, чем на других языках. Но за это приходится платить.

Иногда вам нужно проверить, существует ли свойство объекта или нет. Я нашел несколько способов сделать это. Однако не все из них рекомендуются.

Какие? Продолжайте читать, и вы разберетесь в этом.

1. Сравните с undefined

Вы, наверное, привыкли к этому, когда используете неопределенное свойство.

let book = {
  title: ‘Clean Code’
};
console.log(book.subtitle); // undefined

Мы можем воспользоваться этим, чтобы проверить, находится ли свойство в объекте или нет:

console.log(book.subtitle === undefined); // true

В приведенном выше примере результат истинный, это означает, что свойство подзаголовок не является свойством объектной книги.

2. Сравните с typeof

Поскольку undefined также является типом данных в JavaScript, вы можете использовать typeof, чтобы проверить, существует ли свойство.

let video = {
  title: ‘How I learn to code’
};
console.log(typeof(video.title) === ‘undefined’); // false
console.log(typeof(video.subtitle) === ‘undefined’); // true

Обратите внимание, что я помещаю undefined в пару апострофов.

Я не рекомендую использовать undefined для определения наличия свойства. Почему? Поскольку, если фактическое значение свойства равно не определено, сравнение приведет к ошибке.

Например:

let person = {
  name: ‘Amy’,
  age: undefined
};
console.log(typeof(person.age) === ‘undefined’); // true
console.log(person.age === undefined); // true

Оба результата верны, но это не означает, что свойство age не определено. В этом случае undefined - это просто значение свойства age.

Итак, вам лучше использовать следующие методы:

3. Функция hasOwnProperty

Функция hasOwnProperty вернет логическое значение, чтобы показать, что если объект имеет заданное свойство.

Посмотрите на пример:

let book = {
  name: ‘JavaScript’,
  price: 13
};
console.log(book.hasOwnProperty(‘name’)); // true
console.log(book.hasOwnProperty(‘discount’)); // false

Проверяем свойство имя, оно есть в книге объектов. Следовательно, hasOwnProperty возвращает true. А для свойства скидка результат будет ложным, поскольку объект книга не имеет свойства скидка.

4. в Операторе

Как и функция hasOwnProperty, оператор in проверяет, существует ли свойство в объекте.

Вот как вы можете его использовать:

let person = {
  name: ‘Amy’,
  age: 28
};
console.log(‘name’ in person); // true
console.log(‘age’ in person); // true
console.log(‘relationship’ in person); // false

name и age являются свойствами person, тогда результат будет истинным. Однако объект person не имеет свойства взаимосвязь, в результате возвращается false.

Вы можете спросить, в чем разница между in и hasOwnProperty?

По умолчанию каждый объект JavaScript унаследовал такие свойства, как valueOf, toString и т. Д.

В то время как in может проверять эти унаследованные свойства, hasOwnProperty работает только с определенным вами свойством, а не с унаследованными.

Например:

let tool = {
  name: ‘Sublime Text’,
  category: ‘Code editor’
};
console.log(tool.hasOwnProperty(‘valueOf’)); // false
console.log(‘valueOf’ in tool); // true

На данный момент у вас есть четыре способа проверить, существует ли конкретное свойство. Вы также знаете, какие из них следует использовать.

Наверное, есть какие-то способы, которых я не знаю. Если это так, не могли бы вы сделать мне одолжение, заполнив список?