【问题标题】:How to check if a variable is not null?如何检查变量是否不为空?
【发布时间】:2011-05-20 16:21:31
【问题描述】:

我知道下面是 JavaScript 中检查变量是否不是 null 的两种方法,但我很困惑哪种是最佳实践。

我应该这样做:

if (myVar) {...}

if (myVar !== null) {...}

【问题讨论】:

标签: javascript comparison null-check


【解决方案1】:

它们不等价。如果myVartruthy(即在条件中计算为true),第一个将执行if 语句之后的块,而如果myVar 是任意的,则第二个将执行该块null 以外的值。

JavaScript 中唯一不真实的值如下(也称为 falsy 值):

  • null
  • undefined
  • 0
  • ""(空字符串)
  • false
  • NaN

【讨论】:

    【解决方案2】:

    以下是测试变量是否不为 NULL 的方法:

    if (myVar !== null) {...}

    如果 myVar 不为空,则该块将被执行。如果 myVar 为 undefined 或 false 或 0NaN 或其他任何内容,它将被执行..

    【讨论】:

    • 如果那些想知道的人... 这不会检查空字符串 ("") 和未定义。请参阅我的小提琴作为参考:jsfiddle.net/b0tm7yaf
    【解决方案3】:

    阅读这篇文章:http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

    一般来说,它有一些关于 JavaScript 的好技巧,但它确实提到的一件事是你应该检查 null ,例如:

    if(myvar) { }
    

    它还提到了你可能没有意识到的被认为是“虚假”的东西。

    【讨论】:

    • 这个检查实际上是不安全的。如果 myvar 为 0、false 或任何其他虚假值,则测试将失败(如果您只想检查 not null)。因此,如果变量永远不会有另一个虚假值,请仅使用它来检查 not null。
    • 链接不再有效。我在这里找到了似乎是帖子的副本:appendto.com/2010/10/… 不过这很奇怪,因为以利亚的帖子(和示例代码)会暗示他是作者,但他没有被列为作者...
    • 看起来该站点已不存在。如果您可以在帖子本身中包含信息,而不仅仅是外部链接,那将会很有帮助。
    • 如果值存在但为 0(零),这将不起作用
    【解决方案4】:
    • 只有当myVar 等于:false, 0, "", null, undefined, NaN 或您从未定义变量myVar 时,您的if(myVar) { code } 中的代码才会被执行(然后另外代码停止执行并抛出异常)。
    • 只有当myVar 等于null 或者你从未定义它(抛出异常)时,你的if(myVar !== null) {code} 中的代码才会被执行。

    这里都有 (src)

    如果

    ==(它的否定!=

    ===(它的否定!==

    【讨论】:

      【解决方案5】:

      我刚刚遇到了另一种可能的情况。

      我进行了 ajax 调用,并以字符串格式将数据返回为 null。我不得不像这样检查它:

      if(value != 'null'){}
      

      所以,null 是一个读作“null”而不是真正为 null 的字符串。

      编辑: 应该理解的是,我不是以 应该 的方式销售它。我有一个场景,这是唯一可以完成的方法。我不知道为什么......也许写后端的人错误地呈现了数据,但无论如何,这就是现实生活。令人沮丧的是,有人知道这并不完全正确,然后又被实际上有帮助的人投了赞成票,这令人沮丧。

      【讨论】:

      • 与其比较 null 字符串,不如解析您的值。
      • 这个答案是合法的,无论你是否理解它的应用。我不喜欢因为发布实际有效的东西而被否决。在您触摸它之前,您是否注意到它有一个赞成票?那是因为这是一个真实的场景。
      • 是的,我投了反对票,因为我认为这是错误的解决方案。在ajax调用的情况下,最好先做value = JSON.parse(value),然后用简单正确的value != null测试
      • 显然你不明白。我知道你认为你有,但你没有。
      • 我明白这是一个可行的解决方案。但我认为这不是一个好建议,所以请尊重我的反对意见。
      【解决方案6】:

      有时,即使没有定义,最好做好准备。 为此我使用了typeof

      if(typeof(variable) !== "undefined") {
          //it exist
          if(variable !== null) {
              //and is not null
          }
          else {
              //but is null
          }
      }
      else {
          //it doesn't
      }
      

      【讨论】:

        【解决方案7】:

        if (0) 表示false,if (-1 或任何其他数字不是0) 表示true。以下值不是truthy,null,undefined,0,“”(空字符串),false,NaN

        永远不要使用像 id 这样的数字类型

        if (id) {}
        

        对于可能值为 0 的 id 类型,我们不能使用 if (id) {},因为 if (0) 将意味着 false、invalid,我们希望它意味着作为 true id 号有效。

        所以对于id类型,我们必须使用如下:

        if ((Id !== undefined) && (Id !== null) && (Id !== "")) {
        
        } else {
        
        }
        

        对于其他字符串类型,我们可以使用 if (string) {},因为 null、undefined、empty string 都将评估为 false,这是正确的。

        if (string_type_variable) { }
        

        【讨论】:

        • 如果0 是唯一不适合if (id) {} 方案的情况,您始终可以执行if (id || id === 0) 之类的操作,这比您的解决方案更简洁,并且应该可以正常工作。
        【解决方案8】:

        如果myVar 为空,则如果块不执行,否则它将执行。

        if (myVar != null) {...}

        【讨论】:

        • 不是字符串'null',而是特殊值null
        【解决方案9】:

        您在此处列出的两个条件语句并不比另一个更好。您的使用取决于具体情况。顺便说一下,在第二个示例中,您有一个错字。感叹号后面应该只有一个等号。

        第一个示例确定 myVar 中的值是否为真,并执行 {...}

        中的代码

        第二个示例评估 myVar 是否不等于 null,如果这种情况为真,它将在 {...}

        内执行您的代码

        我建议查看条件语句以了解更多技术。熟悉它们后,您可以决定何时需要它们。

        【讨论】:

        • 这可能不是第二个示例中的拼写错误。第二个= 至关重要,对这个问题有很大的影响。也许您不知道 JavaScript 中存在 !===== 运算符?
        • 感谢您指出这一点。我立即认为这是一个错字,但现在回想一下我有一段时间没有看到并忘记了。
        猜你喜欢
        • 1970-01-01
        • 2012-02-05
        • 2018-07-03
        • 1970-01-01
        • 2011-03-20
        相关资源
        最近更新 更多