直接评估对象的特定属性时,if语句的处理是什么?

时间:2018-10-28 19:03:20

标签: javascript object if-statement search

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

问题是Java的if语句从诸如 if(object.property){} 之类的语句返回布尔答案的过程是什么?

1 个答案:

答案 0 :(得分:0)

与所有编程语言一样,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.");
}