未定义的变量,值== false!值

我用JavaScript编写的一段非常简单的代码存在问题,请问您能帮助我吗?

以下是我认为迄今为止关于JavaScript和变量的理解:

  • 未定义的值在布尔操作中评估为false
  • 通过在比较中使用==运算符,您问的是两个值是否可比较,无论它们的类型如何
  • 我在一个在线课程中找到了一个练习文件,我试图做到这一点,但是我没有在课程中得到相同的结果。 主要的问题是我通过“if value == false {...}”来比较值,而解决方案使用“if!value {...}”

    所以我决定编写一个非常短的代码,以便自己尝试,但我得到的结果不一。 在下面的例子中,我期望这个JS代码生成两个相同的警报(“foo等于false”),但是第一个if语句返回“foo不等于false”,而第二个if返回(如预期的那样) “foo等于假”。

    这是我写的:

    var foo = undefined;
    
    if (foo == false) {
      alert("foo is equal to false");
    } else {
      alert("foo is not equal to false"); // Javascript executes this row
    }
    
    if (!foo) {
      alert("foo is equal to false");  // Javascript executes this row
    } else {
      alert("foo is not equal to false");
    }
    

    AFAIK这两个IF应该做同样的工作,事实上,当我尝试在第一行中替换值“var foo = undefined;” 用“var foo = 0;” 它按预期工作,0是另一个应该被评估为假的值,或者至少这是我记得的。

    你能告诉我我做错了什么吗?


    ==算法(抽象平等比较算法)不是你可以简单地假设一个结果,除非你知道算法。 你需要知道它是如何工作的细节。

    例如, nullundefined是一个特例。 除了认为彼此相等之外,他们不做任何类型转换。

    否则,通常会有一种类型转换尝试将两个操作数都减少为一个通用类型。 这通常会成为toNumber转换。

    这就是为什么:

  • null == undefined; // true

  • null == 0; // false

  • +null == '0' // true

  • 所以如果你知道算法是如何工作的,你知道undefined永远不会等于除undefinednull之外的任何东西,但是其他类型不是严格相等的可能会被强制转换为相等的类型。

    所以if(!x)if(x==false)是完全不同的测试。

  • if(!x)执行到布尔转换。

  • if(x == false)使用复杂的算法来决定正确的转换。

  • 所以......

    if(x == false)
    

    ...如果x undefined ,则确定为不等于false ,但如果x0或甚至"0" ,则它将被认为等于false

  • 0 == false; // true

  • "0" == false; // true


  • 未定义不等于错误,但是当你试图蒸发:

    if (undefined)
    

    整个表达总是错误的

    更多信息:http://www.mapbender.org/JavaScript_pitfalls:_null,_false,_undefined,_NaN


    真相与对等与true是在JavaScript两回事。

    if (...)执行第一个语句,如果...是“ 真理 ”,而不是当它们与任何其他特定值“相等”时,则第二个条件应该看起来像

    if (!foo) {
      alert("foo is falsy");  // Javascript executes this row
    } else {
      alert("foo is truthy");
    }
    

    JavaScript中有很多“falsy”值: NaN""0-0falsenullundefined 。 其他所有值都是truthy

    ! 操作符返回false任何truthy价值和true任何falsy值,所以!x是一样的(x ? false : true)所有x

    链接地址: http://www.djcxy.com/p/13013.html

    上一篇: Undefined variables, value == false versus !value

    下一篇: How to find if an array contains a specific string in JavaScript/jQuery?