Каков процесс if-оператора при оценке объекта для конкретного свойства напрямую? - PullRequest
0 голосов
/ 28 октября 2018

Я довольно новичок в программировании и столкнулся с этой проблемой при изучении объектов.Похоже, что оператор if может искать свойство внутри объекта без использования hasOwnProperty () или ключевого слова in или чего-либо еще по этому вопросу.Вы можете просто напечатать что-то вроде:

if (object.property) {code here};

Я искал в Интернете, но не нашел информации о том, почему это возможно.За исключением некоторых поверхностных обсуждений правдивых или ложных понятий.Которые почти помогли, но были мелкими.Ниже приведен пример кода, который я использовал для обнаружения этой проблемы

var obj = {
    prop1: {
        propa: "x",
        propb: ["b", "q", "y"],
        prop3: "y",
        prop4: "zz"
    }
},
    output = document.getElementById("output");
if (obj.prop1) {
    output.innerHTML = "The propery exist.";  //The property exist shows. 
} else {
    output.innerHTML = "The property does not exist.";
}

Итак, вопрос в том, что представляет собой процесс, выполняемый if-оператором Javascript для возврата логического ответа из оператора, такого как if (object.property) {} ?

1 Ответ

0 голосов
/ 28 октября 2018

Как и все языки программирования, JavaScript ожидает выражение, вычисляющее логическое значение между фигурными скобками в if (expr).Теперь, когда выражение не оценивается как логическое значение, JavaScript использует так называемое принуждение для преобразования значения.То есть он неявно запускает if(Boolean(object.property)) {} при оценке if (object.property) {}.

Результат этой операции зависит от значения object.property, и вы можете обратиться к этой таблице, чтобы узнать, как это работает:

https://dorey.github.io/JavaScript-Equality-Table/

Или прочитайте документацию насемантика истинности из документов .

Обратите внимание, однако, на разницу между вашим открытием и проверкой существования свойства:

const object = { property: false };
if (object.property) {
    console.log("No go. The value evaluates to false.")
} 

if ("property" in object) {
    console.log("Yes. The property exists.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...