【发布时间】:2018-10-28 19:03:20
【问题描述】:
我对编程相当陌生,在探索对象时遇到了这个问题。似乎 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) {} 之类的语句返回布尔答案?
【问题讨论】:
-
是的,真实性和虚假性正是这里所应用的。
if条件中的值被转换为布尔值,就像!!x或Boolean(x)一样,这就是控制流的决定因素。访问对象上不存在的属性会产生值undefined,这是虚假值之一 - 在条件中被视为false。 -
非常感谢Bergi,但这是否意味着当您放入if (object.property) {} 之类的表达式时。它 1) 导航到对象 2) 按对象中的名称搜索对象中的属性以查找该特定属性。 3)如果找到则评估为真,如果没有找到则为假
-
不,如果找到,则评估为属性的值,如果未找到,则评估为
undefined。就像任何财产访问一样。然后,在第四步中,由于该值用于预期为布尔值的if条件,该值被转换为布尔值。 -
如果有帮助:它的评估与
var value = obj..prop1; if (val) { … } else { … }没有区别 -
是的,它确实有帮助。如果我有一个评估为 false 的值,例如 prop1 中的 NaN,而不是评估为 true 的对象。我本可以早点看到它。谢谢
标签: javascript object if-statement search