javascript - 直接评估特定属性的对象时,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) {}等语句返回布尔答案的过程是什么?
解决方案
与所有编程语言一样,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.");
}
推荐阅读
- ajax - 无法通过 Ajax laravel 8 保存数据
- django - 如何在 ManyToManyField 中显示数字显示为数字但不是可编辑的
- python - 优化 pandas 中的字符串操作
- java - 无法运行我现有的 spring mvc 项目
- scala - Scala REPL 中的 Scala 数组函数
- python - 解决Windows上python环境中的错误
- java - selenium web 驱动程序表单提交
- asp.net - EMPEntities 不包含“添加”的定义,并且没有可访问的扩展方法“添加”接受“EMPEntities”类型的第一个参数
- python - 日历在 python selenium 中不起作用
- python - kedro 作为 python 命令而不是命令行运行