Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
{}==在javascript中是否为真?_Javascript - Fatal编程技术网

{}==在javascript中是否为真?

{}==在javascript中是否为真?,javascript,Javascript,有人能用javascript解释一下为什么 警报({}==true)显示false 如果({})警报('true')显示true 改变结果的if条件有什么不同 我想写一些速记参数验证器obj | |(obj={})我对这个发现感到困惑。{}不是真的,所以它不会出现在您的第一个示例中。在第二个示例中,{}不是false,因此它将通过测试 就像我的老师常说的,你不能比较土豆和胡萝卜 它不仅适用于阵列,还适用于任何东西: alert(3 == true); // shows false if (3)

有人能用javascript解释一下为什么

警报({}==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