{} == 在 javascript 中是否为真
Is {} == true or not in javascript?
有人可以解释为什么在javascript中,
alert({} == true)
显示错误
if ({}) alert('true')
显示真实?
更改结果的 if 条件有何不同?
我想写一些速记论证验证器obj || (obj = {});
,我对这个发现感到困惑。
if ({}) alert('true')
-> true
{}
是一个对象,当在if
语句的上下文中求值时,它被强制到Boolean
,并且由于Boolean({})
的计算结果为true
,所以你会得到if (true)
。这记录在 ECMAScript 规范的第 12.5 节 if 语句中:
生产 If 语句:求值 if (表达式( 语句 如下:
- 让 exprRef 成为计算表达式的结果。
- 如果 ToBoolean(GetValue(exprRef(( 为 false,则返回 (normal, empty, empty(。
- 返回评估语句的结果。
alert({} == true)
-> false
这个更棘手。来自 ECMAScript 规范,第 11.9.3 节抽象相等比较算法:
比较 x == y,其中 x 和 y 是值,产生真或假。此类比较按如下方式执行:
如果 Type(y( 是布尔值,则返回比较结果 x == ToNumber(y(。
因此,{} == true
将被评估为 {} == Number(true)
,其计算为 {} == 1
,即false
。
这也是为什么1 == true
的计算结果是true
,而2 == true
的评估结果是false
。
{}
不是true
,所以它不会出现在你的第一个示例中。在第二个示例中,{}
不是假的,因此它将通过测试。
就像我的老师常说的,你不能拿土豆和胡萝卜来比较。
它不仅适用于数组,还可以与任何东西一起使用:
alert(3 == true); // shows false
if (3) alert('true'); // shows true
在布尔运算中,通常任何不0
计算结果为 true。http://jsfiddle.net/QF8GW/
if (0) console.log("0 shows true"); // does not log a value
if (-1) console.log("-1 shows true");
if (12345) console.log("12345 shows true");
if ({}) console.log("{} shows true");
if ([]) console.log("[] shows true");
除0
之外的所有这些都将计算为 true。
但是,与true
相比,它们的值不会评估为true
。
// logs the statement (1 and true are the same.)
if (1 == true) console.log("1==true shows true");
if (12345 == true) console.log("12345==true shows true"); // does not log
我在 jsfiddle.net 中尝试过,只在第一个警报中尝试说假,IF没有提醒真。
alert({} == true) //display "false"
if({} == true)
{
alert("it's true");
}else
{
alert("it's false"); // <-- alert this
}
( 片段 (
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 用于检查数组中是否存在元素的javascript自定义方法
- 是否可以在浏览器中使用纯JavaScript保存音频流
- 是否可以使用JavaScript/AAJAX在客户端创建一个文件
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- PhantomJS - 检查javascript函数是否正在运行的任何方法
- 是否有任何JavaScript UI组件可以显示字符串之间的差异
- javascript跨浏览器确定用户是否滚动到页面底部
- 是否可以用JavaScript显示等效的文件夹对话框
- 检查是否存在使用chrome扩展的javascript库
- 如何知道javascript for语句中的所有结果是否都是错误的
- 是否存在Javascript Liferay Service库的文档?如何处理错误情况
- 是否可以使用jquery或javascript将自动增量类添加到列表中
- javascript移动交叉浏览器确定用户是否滚动到页面底部
- 有没有一种方法可以从Javascript检测特定的应用程序是否安装在(AndroidiOS)设备上
- javascript数组元素是否知道其封闭数组
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- 是否有任何设置阻止JavaScript在系统上工作
- 是否可以在javascript中读取IE中的本地文件
- 是否有任何Javascript函数从指定的索引中进行正则表达式匹配