当直接为特定属性评估对象时,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.properties({}之类的语句返回布尔答案的过程是什么?

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

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

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

或者从文档中阅读关于truthiness语义的文档。

然而,请注意您的发现和检查财产是否存在之间的区别:

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

最新更新