Метод JavaScript hasOwnProperty используется для проверки того, имеет ли данный объект определенное свойство.
Свойство, проверяемое методом hasOwnProperty, является внутренним для рассматриваемого объекта, то есть оно должно быть определено пользователем.
Если свойство, переданное hasOwnProperty, существует в объекте, метод возвращает true, в противном случае он возвращает false .
Пример 1:
В этом примере мы создаем объект человека и добавляем свойство name, затем мы используем hasOwnProperty, чтобы убедиться, что это свойство является частью нашего объекта.
1var person = {
2 "name": "Brian",
3 "lastName": "Scott"
4};
5
6console.log( person.hasOwnProperty("name") );
Выход:
1true
Пример 2:
В этом примере мы собираемся объявить объект с именем car и присвоить ему свойство с именем door, поэтому мы можем использовать hasOwnProperty для проверки этого свойства.
1var car = {
2 "doors": 4,
3 "engine": 2.0,
4 "color": "black"
5};
6
7var hasDoor = car.hasOwnProperty("doors");
8
9console.log(hasDoor);
Выход:
1true
Пример 3:
Здесь мы намеренно напишем имя свойства нашего объекта с ошибкой, чтобы метод hasOwnProperty возвращал false .
1var shoppingCart = {
2 "fruits": true,
3 "bread": false
4};
5
6var hasFruits = shoppingCart.hasOwnProperty("fruites");
7
8console.log(hasFruits);
Выход:
1false
Почему важно использовать метод hasOwnProperty?
Давайте рассмотрим важность использования метода hasOwnProperty для проверки существования свойства внутри объекта в JavaScript.
Все в JavaScript является объектом.
Правильно, любой элемент, созданный в JavaScript, считается объектом. Числа, текстовые строки, массивы и любые другие типы данных JavaScript наследуют свойства родительского объекта.
Пример 1:
Числовой тип данных в JavaScript считается объектом.
1var number = 10.22333;
2var otherNumber = number.toPrecision(3);
3
4console.log(otherNumber);
Выход:
110.2
Пример 2:
Строковый тип данных также считается объектом.
1var name = "Peter Max";
2var char = name.charAt(2);
3
4console.log(char);
Выход:
1t
Пример 3:
Даже массивы в JavaScript являются объектами.
1var cars = ["BMW", "Audi", "Aston Martin"];
2
3var carIndexNumber = cars.indexOf("BMW");
4
5console.log(carIndexNumber);
Выход:
10
В предыдущих примерах все объекты наследуют свойства основного объекта Object.
Команда «in» в JavaScript
Новые программисты JavaScript обычно используют команду in, чтобы проверить, существует ли свойство для данного объекта.
Пример:
1var car = {
2 "doors": 2,
3 "engine": 1.2,
4 "color": "yellow"
5};
6
7if ("engine" in car) {
8 console.log("true");
9} else {
10 console.log("false");
11}
Выход:
1true
Проблема в том, что команда in является исчерпывающей. Он будет выполнять поиск по всем свойствам объекта. В проверку включаются созданные пользователем свойства и свойства, унаследованные от родительского объекта.
Это может вызвать логическую ошибку, если программист запустит часть кода, только если свойство объекта существует.
Но программист хочет проверить свойство объекта по умолчанию? Или свойство, созданное пользователем?
Пример:
1var car = {
2 "doors": 2,
3 "engine": 1.2,
4 "color": "yellow"
5};
6
7if ("toString" in car) {
8 console.log("true");
9} else {
10 console.log("false");
11}
Выход:
1true
В предыдущем примере команда in возвращает true, то есть предполагает, что свойство toString существует в нашем объекте, хотя это свойство нами не было объявлено.
Свойство/метод toString наследуется от родительского объекта. Чтобы избежать этой путаницы, всегда используйте метод hasOwnProperty .
Пример:
1var car = {
2 "doors": 2,
3 "engine": 1.2,
4 "color": "yellow"
5};
6
7if ( car.hasOwnProperty("toString") ) {
8 console.log("true");
9} else {
10 console.log("false");
11}
Выход:
1false
Теперь возвращаемым значением было значение false . Это связано с тем, что, как мы видели ранее, метод hasOwnProperty ищет только определенные пользователем свойства.