Использование неправильных способов приведет к обманчивым результатам.
Гибкость - не всегда хорошо.
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
На данный момент у вас есть четыре способа проверить, существует ли конкретное свойство. Вы также знаете, какие из них следует использовать.
Наверное, есть какие-то способы, которых я не знаю. Если это так, не могли бы вы сделать мне одолжение, заполнив список?