Задать вопрос
usdglander
@usdglander
Yipee-ki-yay

Имеет ли смысл такая конструкция в JS?

Добрый день!
Я сам бэкенд разработчик, поэтому JS знаю весьма поверхностно. В проекте над котором я работаю часто в js-коде встречаю конструкцию вида:
for (var i in result) {
    if (result.hasOwnProperty(i)) {
        //Остальной код
    }
}

Насколько я понимаю, в данном случае for перебирает именно свойства объекта, поэтому result.hasOwnProperty(i) не может быть false. Во всяком случае я не придумал подходящего "кейса".
Правильно ли я думаю, что if, в данном случае избыточен или нет?
Заранее спасибо за ответы!
  • Вопрос задан
  • 157 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик расширенный
    13 месяцев
    Далее
  • Академия Eduson
    Fullstack-разработчик на JavaScript
    11 месяцев
    Далее
  • Skillbox
    JavaScript
    3 месяца
    Далее
Решения вопроса 3
Xuxicheta
@Xuxicheta
инженер
Цикл for..in перебирает свойства объекта и всех его прототипов. Чтобы исключить свойства прототипов из цикла используется проверка hasOwnProperty.
Сейчас это считается устаревшим, в моде перебор объекта через Object.keys/Object.values/Object.enties с помощью for..of или перебирающих методов Array.

т.е. нынче конструкция
for (var i in result) {
    if (result.hasOwnProperty(i)) {
        //Остальной код
    }
}

должна выглядеть так
Object.keys(result).forEach((i) => {
  //Остальной код
});
Ответ написан
Комментировать
sfi0zy
@sfi0zy Куратор тега JavaScript
Creative frontend developer
result.hasOwnProperty(i) не может быть false. Во всяком случае я не придумал подходящего "кейса".

Может быть и false, если какое-то свойство определено в прототипе:
class Test {
    constructor() {
        this.foo = 'foo';
    }
};

Test.prototype.bar = 'bar';

const test = new Test();

console.log('foo' in test); // true
console.log('bar' in test); // true
console.log(test.hasOwnProperty('foo')); // true
console.log(test.hasOwnProperty('bar')); // false
Ответ написан
Комментировать
@McBernar
К объекту через прототипы может быть прикручено какое-то общее свойство, которое в данном контексте не нужно. Поэтому тут и проверяются свойства именно этого конкретного объекта без беготни по цепочке прототипов.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽