{}==在javascript中是否为真?
有人能用javascript解释一下为什么{}==在javascript中是否为真?,javascript,Javascript,有人能用javascript解释一下为什么 警报({}==true)显示false 如果({})警报('true')显示true 改变结果的if条件有什么不同 我想写一些速记参数验证器obj | |(obj={})我对这个发现感到困惑。{}不是真的,所以它不会出现在您的第一个示例中。在第二个示例中,{}不是false,因此它将通过测试 就像我的老师常说的,你不能比较土豆和胡萝卜 它不仅适用于阵列,还适用于任何东西: alert(3 == true); // shows false if (3)
警报({}==true)
显示false
如果({})警报('true')
显示true
改变结果的if条件有什么不同
我想写一些速记参数验证器
obj | |(obj={})
我对这个发现感到困惑。{}
不是真的
,所以它不会出现在您的第一个示例中。在第二个示例中,{}
不是false,因此它将通过测试
就像我的老师常说的,你不能比较土豆和胡萝卜
它不仅适用于阵列,还适用于任何东西:
alert(3 == true); // shows false
if (3) alert('true'); // shows true
alert({}==true)//显示“false”
如果({}==true)
{
警惕(“这是真的”);
}否则
{
警报(“它是假的”);//在布尔运算中,通常任何不是0
的值都是真的。
除了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
我尝试了,只尝试了第一个警报,警报为false,IF不为true。IF({})警报('true')
->true
{}
是一个对象,当在if
语句的上下文中求值时,它被强制为Boolean
,并且由于Boolean({})
求值为true
,因此得到if(true)
。这在ECMAScript规范的一节中有说明:
对生产If语句:If(Expression)语句进行求值
详情如下:
让exprRef作为计算表达式的结果
如果ToBoolean(GetValue(exprRef))为false,则返回(normal、empty、empty)
返回求值语句的结果
警报({}==true)
->false
这是一个更棘手的问题。从规范中,部分:
比较x==y,其中x和y是值,生成true或false。这样的比较按如下方式执行:
如果类型(y)是布尔值,则返回比较结果x==ToNumber(y)
因此,{}==true
将被评估为{}==Number(true)
,其评估为{}==1
,即false
这也是为什么1==true
的计算结果为true
,但是2==true
的计算结果为false这是在特定的浏览器上吗?我试过了,没有看到alert('true')
显示。在Chrome 21中,它们都是假的:对不起,我第一次输入错误,我的意思是如果({})alert('true'))。你们回复得太快了!一个空对象是真实的,但根据=
操作符的语义,它并不“等于”true
。通过编辑,它现在完全不同了。if({})
等同于if({}!=false)
,而不是if({}==true)
。奇怪的是,这给了你,。你是说如果(exp)语句
实际上意味着“如果exp不为false,那么exp”?本质上是的。除了少数将计算为false的值外,例如null
或undefined
。或者1
将计算为true
,因为它可以转换为布尔值true
。
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");
// 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