~~~
当然输出efg,因为b非“”阿~

解决方案 »

  1.   

    你已经定义了 var b=false;
      

  2.   

    你已经声明b=false了,
    而你下一句 if (b == "") 等价于 if (b),
    所以总是输出else中的内容。Ps:你的if (b == "")本身就有问题,b是一个bool值,你为什么让它去于字串比较?
      

  3.   

    刚才没有验证,想当然以为是定义了b=false,当然输出“efg”,事实上错了,寒自己一下。实践是检验真理的唯一标准啊,学习
      

  4.   

    相等运算符 (==、!=) 
    如果两表达式的类型不同,则试图将它们转换为字符串、数字或 Boolean 量。 
    NaN 与包括其本身在内的任何值都不相等。 
    负零等于正零。 
    null 与 null 和 undefined 相等。 
    相同的字符串、数值上相等的数字、相同的对象、相同的 Boolean 值或者(当类型不同时)能被强制转化为上述情况之一,均被认为是相等的。 
    其他比较均被认为是不相等的。 恒等运算符 (===、!==) 
    除了不进行类型转换,并且类型必须相同以外,这些运算符与相等运算符的作用是一样的。 ---------
    以上是参考书上说的
    可能这一句应该说得更清楚一点
    “如果两表达式的类型不同,则试图将它们转换为字符串、数字或 Boolean 量。 ”
    --->>>
    “如果两表达式的类型不同,则试图将它们转换为字符串、数字或 Boolean 量。 
    如果一个是boolean,一个是number,则,将number转化成boolean,再比较
    如果一个是number,一个是string,则,将string转化成number,再比较
    如果一个是boolean,一个是string,则,将string转化成number,再转化成boolean,再比较