首页 > 解决方案 > 直接评估特定属性的对象时,if 语句的过程是什么?

问题描述

我对编程相当陌生,并且在探索对象时遇到了这个问题。似乎 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.";
}

所以问题是 Javascript if 语句从if (object.property) {}等语句返回布尔答案的过程是什么?

标签: javascriptobjectif-statementsearch

解决方案


与所有编程语言一样,JavaScript 期望表达式在if (expr). 现在,当表达式不计算为布尔值时,JavaScript 使用所谓的强制转换值。也就是说,它if(Boolean(object.property)) {}在评估时隐式运行if (object.property) {}

此操作的结果取决于 的值,object.property您可以查阅此表以了解其工作原理:

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

或者从docs阅读关于真实性语义的文档。

但是请注意您的发现和检查属性是否存在之间的区别:

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.");
}

推荐阅读