【问题标题】:evaluate to "false"评估为“假”
【发布时间】:2011-03-23 17:49:11
【问题描述】:

我真的很想深入了解“评估为假”时的含义,例如:

Null 默认为 false

NaN 默认为 false

我认为情况正好相反,就像 Null 的意思是“空”,因此它应该评估为真,如果某物是 Null,它是空的,真。如果它不为空,则 null 为假。所以每当我写一个条件说:**somedata** == null,这是否意味着 somedata 不为空,因为 null 评估为 false?但是如果**somedata** IS empty null 则为 true。

【问题讨论】:

标签: javascript


【解决方案1】:

这意味着如果你这样做了

if(null)
{
  //this will never be hit
}

该块永远不会被执行。

【讨论】:

    【解决方案2】:

    哎呀,你在扭曲我的大脑!

    根据定义,“Null”值本身就是假的。如果你问某事物是否为 == Null,那么如果该事物为 == Null,则表达式为真,否则为假。

    【讨论】:

      【解决方案3】:

      有时,如果我对某种情况感到困惑,我会设置测试用例:

         var param1;
          var param2 = "";
          var param3 = "I'm a string";
          
          if (param1)
          {
               alert(param1);   //fails
          }
          
          if (!param1)
          {
              //alert(param1);   //success : undefined
          }
          
          if (param1 == undefined)
          {
              //alert(param1);   //success : undefined
          }
          
          if (param1 == null)
          {
              //alert(param1);   //success : undefined
          }
          
          if (param2)
          {
              //alert(param2); //fails
          }
          
          if (!param2)
          {
              //alert(param2);   //success : no value
          }
          
          if (param2 == undefined)
          {
              //alert(param2);   //fails
          }
          
          if (param2 == null)
          {
              //alert(param2);   //fails
          }
          
          if (param3)
          {
              //alert(param3); //success : im a string
          }
          
          if (!param3)
          {
              //alert(param3);   //fails
          }
          
          if (param3 == undefined)
          {
              //alert(param3);   //fails
          }
          
          if (param3 == null)
          {
              //alert(param2);   //fails
          }
      

      http://jsfiddle.net/HbML8/1/

      也许这将有助于说明上述正确答案;)

      干杯!

      【讨论】:

      • Bosworth99,这个插图很棒。我从这个论坛得到了最好的答案。我正在打印此页面以用作参考。我感谢你们所有人的时间!谢谢!
      【解决方案4】:

      要理解“评估为假”的含义,请考虑一下,在类似的条件表达式中

      if( condition ) { ... }
      

      预计condition 是一个布尔值,其计算结果为truefalse。类似的东西

      if( x == 3 ) { ... }
      

      很好,因为您可以使用表达式x == 3 并决定它是真还是假。像

      if( null ) { ... }
      

      原则上是不行的,因为null 不是布尔值。有些语言不允许这样做,有些语言决定每当他们看到null 时,它的效果与false 相同。这就是“Null 评估为 false”的意思。

      这是唯一需要担心将null 解释为false 的情况。在您发布的其他示例中:

      if(**somedata** == null) { ... }
      

      如果**somedata** 为空,括号中的代码将被执行,如果**somedata** 不是null,则不会执行。 null 不会神奇地将其值更改为 truefalse。不需要转换,因为**somedata** == null 已经是一个有效的布尔表达式。

      【讨论】:

      • Jong Bor,好的,我现在开始明白了。你是对的,我在 javascript 中看到 null 默认为 false 。感谢您花时间详细解释 Null 是布尔值(有时“理解”)的区别和/或比较,而实际上它不是布尔值。
      猜你喜欢
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多