我对编程还很陌生,在探索对象时遇到了这个问题。似乎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){} 之类的语句返回布尔答案的过程是什么?
答案 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.");
}