【问题标题】:javascript check for not nulljavascript 检查不为空
【发布时间】:2010-03-11 06:10:42
【问题描述】:

下面是代码 sn-p,我们在其中检索表单值。 在进一步处理之前检查值是否不为空..

var val = document.FileList.hiddenInfo.value;
alert("val is " + val);  // this prints null which is as expected
if (val != null)
{
   alert("value is "+val.length); // this returns 4
}
else
{
   alert("value* is null");
}

任何想法为什么会这样.. ??

【问题讨论】:

  • CW 发生是因为 6 个以上的用户编辑了问题。
  • !== 而不是 !=
  • @YOU 什么是 CW?
  • @snoobdogg Community Wiki?!

标签: javascript


【解决方案1】:

这将为您解决问题

if (!!val) {
    alert("this is not null")
} else {
    alert("this is null")
}

【讨论】:

  • 虽然从技术上讲这是可行的,但双非 (!!) 是一种编程失误。它实际上相当于if(val),读起来更清晰。我会坚持这一点(fyi Ujwal,!!val 在技术上也应该在 C 或 C++ 中工作)请参阅此处了解 javascript 的“真实性”值:janosch.woschitz.org/javascript-equality-comparison
  • if(!Boolean(val)) 怎么样
  • !!只是一个双重否定,所以它的字面意思是 if(val.exists)。不过我还是喜欢它的样子!
  • 如果val = 0 将失败,因为!!0 评估为假
  • 这不是简单的双重否定。这是一个转化的双重否定。您基本上是将变量转换为布尔值。关于这个主题有很多话要说,但我只想说,如果你的变量是 0falsenullundefined 或一些这样的值,用一个 ! 解析为 true,你'将获得false !!。如果有的话,应该谨慎使用。
【解决方案2】:

有 3 种方法可以检查“非空”。我的建议是使用 Strict Not 版本。

1。严格不是版本

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

Strict Not 版本使用“严格相等比较算法”http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6!==!= 运算符具有更快的性能,因为严格相等比较算法不会对值进行类型转换。

2。非严格非版本

if (val != 'null') { ... }

非严格版本使用“抽象等式比较算法”http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3!= 的性能比 !== 运算符慢,因为抽象等式比较算法对值进行类型转换。

3。双非版

if (!!val) { ... }

Double Not 版本 !! 比 Strict Not 版本 !== 和 Non-Strict Not 版本 != (https://jsperf.com/tfm-not-null/6) 具有更快的性能。但是,它会将 undefinedNaN 等“Falsey”值类型转换为 False (http://www.ecma-international.org/ecma-262/5.1/#sec-9.2),这可能会导致意外结果,并且由于未明确说明 null,因此可读性较差。

【讨论】:

  • 这很奇怪。 !!val 为我工作,但 val!==null 没有。为什么会这样?
  • @TheLogicGuy - val 的数据类型是什么? console.log(typeof val).
  • 号码。该代码从数组中删除“坏”值(null、0 等)。这是代码:pastebin.com/L7Z1BtuL
  • @TheLogicGuy - 您的实际问题与 null 无关。 NaN 没有正确过滤 - 这将始终返回 true。这应该有效:!(isNaN(val) && (typeof val !== "undefined"))。在 Javascript 中有一个称为“Truthy”和“Falsey”的概念。双非运算符!! 将删除的不仅仅是null。它也会将NaNundefined 转换为false。这就是为什么您的数组在使用双非运算符 !! 时正确过滤的原因。
【解决方案3】:

这是因为 val 不是null,而是包含'null' 作为字符串。

尝试用'null'检查

if ('null' != val)

有关何时以及为何起作用的说明,请参阅the details below

【讨论】:

  • 应该是 if (null != val) 以某种方式无法使用引号
  • Mr.x 在问题中,null 是字符串......你的情况可能不同
【解决方案4】:

!== 用作!= 将带您进入一个非传递JavaScript 真值表怪异的世界。

【讨论】:

  • 除非您想专门检查undefinednull。在这种情况下,val != null 将为undefinednull 返回true,但不会为0 等其他虚假值返回。
【解决方案5】:

您应该使用严格的not equals比较运算符!==,这样如果用户输入"null",您就不会到达else

【讨论】:

  • 如果 Susan Null 的名字没有被数据输入表单接受,她会不高兴的,哈哈
【解决方案6】:

查看https://softwareengineering.stackexchange.com/a/253723

if(value) {
}

如果值不是,则评估为真:

null
undefined
NaN
empty string ("")
0
false

【讨论】:

    【解决方案7】:

    这应该可以正常工作..

       if(val!= null)
        {
           alert("value is "+val.length); //-- this returns 4
        }
        else
        {
           alert("value* is null");
        }
    

    【讨论】:

      【解决方案8】:

      这可能是因为val的值实际上是字符串"null"而不是值null

      【讨论】:

        【解决方案9】:

        这将起作用:

        if (val) {
            alert("Not null");
        } else {
            alert("Null");
        }
        

        【讨论】:

          【解决方案10】:

          如果您希望能够包含 0 作为有效值:

          if (!!val || val === 0) { ... }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-05-16
            • 2011-09-07
            • 1970-01-01
            • 2022-01-25
            • 2015-11-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多