【问题标题】:JavaScript check if value is only undefined, null or falseJavaScript 检查值是否只是未定义、null 或 false
【发布时间】:2011-07-26 21:31:21
【问题描述】:

除了创建一个函数之外,有没有更短的方法来检查一个值是undefinednull 还是 false 仅在 JavaScript 中?

下面的if语句等价于if(val===null && val===undefined val===false) 该代码运行良好,我正在寻找更短的等效代码。

if(val==null || val===false){
  ;
}

val=undefinedval=null 时,val==null 以上的计算结果都为真。

我在想也许可以使用按位运算符或其他一些技巧。

【问题讨论】:

  • 怎么了:if (val){} ?
  • '',0,'0' 以及其他几个配置都是正确的
  • if (val) // null undefined false or 0
  • === 运算符在这里工作得很好,与null 相比,您为什么使用==
  • 我认为这是你能得到的最短的......或者创建你自己的函数。顺便说一句,'0' 确实 not 评估为 false

标签: javascript null undefined


【解决方案1】:

好吧,你总是可以“放弃”:)

function b(val){
    return (val==null || val===false);
}

【讨论】:

  • 好吧,我盗版了,但最终还是将false 更改为!1
  • 我认为我们可以将 val === false 更改为 val == false :)
  • @Konza:That just how == is defined。它相当复杂,这也是为什么很多人建议使用===,除非你真的知道自己在做什么。
  • 没有更好的工作可以用作 if(typeof variable_here === 'undefined'){ // 你的代码在这里。 };
  • 这很疯狂,但对我来说,它不适用于null,而是'null'!并且也不适用于val == ''(在Firefox控制台和现场测试中......如果你有线索?
【解决方案2】:

我认为最好的方法是:

if(val != true){
//do something
} 

如果 val 为 false、NaN 或未定义,则为 true。

【讨论】:

  • 这种技术可能是最好的忽略 NaN 值的技术。
【解决方案3】:

我认为您要查找的是 !!val==false,可以将其转换为 !val(甚至更短):

你看:

function checkValue(value) {
    console.log(!!value);
}

checkValue(); // false
checkValue(null); // false
checkValue(undefined); // false
checkValue(false); // false
checkValue(""); // false

checkValue(true); // true
checkValue({}); // true
checkValue("any string"); // true

这可以通过使用! 运算符翻转值来实现。

如果你像这样翻转null 一次:

console.log(!null) // that would output --> true

如果你像这样翻转它两次:

console.log(!!null) // that would output --> false

undefinedfalse 相同。

您的代码:

if(val==null || val===false){
  ;
}

然后会变成:

if(!val) {
  ;
}

即使有一个字符串但它的长度为零,这也适用于所有情况。 现在,如果您希望它也适用于数字 0(如果它被双重翻转,它将变为 false),那么您的 if 将变为:

if(!val && val !== 0) {
  // code runs only when val == null, undefined, false, or empty string ""
}

【讨论】:

  • 你忘记了 0 和 ''
  • 更新了答案,也将字符串和数字 0 考虑在内。
【解决方案4】:

一种方法是这样的:

var acceptable = {"undefined": 1, "boolean": 1, "object": 1};

if(!val && acceptable[typeof val]){
  // ...
}

鉴于您的限制,我认为它可以最大限度地减少操作次数,从而加快检查速度。

【讨论】:

    【解决方案5】:

    另一种解决方案:

    根据文档,布尔对象如果值不为0、未定义、空等则返回truehttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean

    如果 value 被省略或为 0、-0、null、false、NaN、undefined 或空字符串 (""),则对象的初始值为 false。

    所以

    if(布尔值(val))
    {
    //可执行...
    }

    【讨论】:

      【解决方案6】:

      据我所知,这种事情的唯一捷径是

      var val;
      (val==null || val===false) ? false: true;
      

      【讨论】:

      • @missingno 不明白为什么不...它比写出if ... else ... 更短,无论如何,你能得到这样的条件语句多短? ...比“放弃” imo 更好的答案 >.>
      • 所有条件所做的就是将事物转换为布尔值。但是,这可以通过 !! 简洁地完成,或者在这种情况下,什么都不做,因为条件已经是布尔值。
      • @missingno no no no .... 您想要根据条件执行的任何代码都将代替 falsetrue...这些只是为了清楚起见导致什么结果
      • 有些人认为这是不好的风格。三元运算符应该用于返回一个值,而不是因为它的副作用。
      • 我会在 falsetrue 所在的位置添加函数。现在它似乎被过度设计了。
      【解决方案7】:

      布尔值(val) === 假。这对我有用,可以检查值是否错误。

      【讨论】:

      • 但这也适用于0""。另外,一丁已经提供了这个解决方案。
      【解决方案8】:

      使用 ?干净多了。

      var ? function_if_exists() : function_if_doesnt_exist();
      

      【讨论】:

        【解决方案9】:

        像下面这样试试

        var Boolify = require('node-boolify').Boolify;
        if (!Boolify(val)) {
            //your instruction
        }
        

        参考node-boolify

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-15
          • 2014-01-23
          • 2015-09-27
          • 1970-01-01
          • 1970-01-01
          • 2021-05-09
          • 2020-06-09
          相关资源
          最近更新 更多