Javascript 为什么(';0';?';a';';b';)的行为与(';0';==真?';a';&#b';)

Javascript 为什么(';0';?';a';';b';)的行为与(';0';==真?';a';&#b';),javascript,Javascript,为什么以下两种说法的结果不同 ('0'?'a':'b')/*->'a'*/ ('0'==true?'a':'b')/*->'b'*/ 编辑: 我应该补充一点,我怀疑将“0”转换为要比较的布尔值的第一个语句-它应该与“'0'==true”完全相同 显然这不是真的。因为“0”不等于1,所以它不等于真,尽管它不是假。 在第一种情况下,当“0”被强制转换为bool时,强制转换运算符对所有非0的内容返回true。这是因为'0'是true(在if语句中),但不被视为等于true。就像3和17都是真实的,

为什么以下两种说法的结果不同

('0'?'a':'b')/*->'a'*/
('0'==true?'a':'b')/*->'b'*/

编辑:

我应该补充一点,我怀疑将“0”转换为要比较的布尔值的第一个语句-它应该与“'0'==true”完全相同
显然这不是真的。

因为“0”不等于1,所以它不等于真,尽管它不是假。
在第一种情况下,当“0”被强制转换为bool时,强制转换运算符对所有非0的内容返回true。

这是因为
'0'
是true(在if语句中),但不被视为等于
true
。就像3和17都是真实的,但并不相等。

主要是因为JavaScript在真实性方面非常不一致。但答案是:

  • 在本例中,“0”直接转换为布尔值,“0”是非空字符串,为真
  • 在这种情况下,不会发生转换;字符串不等于布尔值
  • ('0'?'a':'b')-->0为false,“0”是某个字符串,因此不是false 在这种情况下,0、null或“”(空字符串)被视为FALSE

    ('0'==true?'a':'b')-->如其他人所述,与布尔值true相比,某些_字符串不是true

    ('0' ? 'a' : 'b'); /* -> 'a' */
    
    0是一个字符串值,每个非空字符串都被评估为,而不是作为布尔值进行测试。如果删除了引号:

    (0 ? 'a' : 'b'); /* -> 'b' */
    
    您将收到b-现在0不是字符串,并且评估为false

    ('0' == true ? 'a' : 'b'); /* -> 'b' */
    

    0计算为bool,两者都计算为数字,这是false。中的点表明可以执行大量转换来比较相同类型的变量。

    首先,为了完整性:

    ('0' ? 'a' : 'b') 
    
    'a'
    ,因为
    '0'
    是:

    字符串:如果参数为空字符串(长度为零),则结果为false; 否则结果为


    现在转到
    '0'==true

    这里将进行两次类型转换。我们可以在规范中遵循这一点

    操作数表示为
    x
    y
    x==y

    在我们的例子中,
    x
    是一个字符串(
    '0'
    ),而
    y
    是一个布尔值(
    true
    )。因此,执行步骤7:

    如果类型(y)是布尔值,则返回比较结果x==ToNumber(y)

    将布尔值转换为数字时:

    布尔值:如果参数为true,则结果为1。如果参数为false,则结果为+0

    现在我们有了

    '0' == 1
    
    符合步骤5中的条件:

    如果Type(x)是String,Type(y)是Number,则返回比较结果ToNumber(x)==y

    字符串如何转换为数字更为复杂,但当然也可以在中找到

    所以最后的比较是

    0 == 1
    

    这是
    false
    (步骤1.a.vi.)

    我想('0'==false)也是false。第二条语句中的字符串似乎已转换为布尔值。('1'==true)->true,('0'==false)->trueWell,('1'==true)为true;)在第二条语句中没有===这个词。我认为它是相当一致的,问题是我们如何使用它。有些东西并不像我们想的那样被使用。但所有这些都是解释的问题,导致不同的解决方案等等,而不是像数学中那样的普遍真理你的第二点错了。确实发生了转换。实际上,您将“0”计算为布尔值的说法是不正确的,实际发生的情况是将“true”计算为数字,然后强制将“0”计算为数字。这是您指向的规范的直接结果。另见费利克斯·金的回答。