JavaScript检查值是否仅为未定义、null或false

JavaScript检查值是否仅为未定义、null或false,javascript,null,undefined,Javascript,Null,Undefined,除了创建函数外,是否有一种较短的方法来检查值是否仅在JavaScript中是未定义的、空的或假的 下面的if语句相当于if(val==null&&val==undefined val==false) 代码运行良好,我正在寻找一个更短的等效代码 if(val==null || val===false){ ; } 当val=undefined或val=null时,上述val==null计算结果均为真 我在想也许可以使用位运算符,或者其他一些技巧。我所知道的这种事情的唯一捷径是 var val;

除了创建函数外,是否有一种较短的方法来检查值是否仅在JavaScript中是
未定义的
空的
假的

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

if(val==null || val===false){
  ;
}
val=undefined
val=null
时,上述
val==null
计算结果均为真


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

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

var val;
(val==null || val===false) ? false: true;
嗯,你总是可以“放弃”:


一种方法是:

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

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

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

我认为最好的方法是:

if(val != true){
//do something
} 
如果val为false、NaN或未定义,则为true

另一种解决方案:

基于文档,如果值不是0、未定义、null等,布尔对象将返回true

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

所以

if(布尔值(val)) { //可执行文件。。。
} 布尔值(val)==false。这对我检查值是否错误起了作用

使用什么?它干净多了

var ? function_if_exists() : function_if_doesnt_exist();

我想你要找的是
!!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
未定义
错误
相同

您的代码:

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 ""
}
试试下面这样

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

请参阅

@missingno不明白为什么不。。。如果。。。否则…
在任何情况下,像这样的条件语句能缩短多少。。。比“放弃”更好的答案imo>>你的条件所做的就是把东西转换成布尔值。然而,这可以通过
简洁地完成
或者,在本例中,由于考虑已经是布尔值,所以什么也不做。@missingno。。。。根据条件执行的任何代码都将取代
false
true
。。。这些都是为了清楚,什么人会认为这是坏的风格。应该使用三元运算符来返回值,而不是因为它的副作用。我将添加函数,其中
false
true
。现在它看起来像是被过度设计了。好吧,我盗版地放弃了,但最终还是把
false
改成了
!1
我想我们可以将val==false改为val==false:)@Konza:。这相当复杂,这就是为什么很多人建议使用
=====
,除非你真的知道自己在做什么。如果(typeof variable_here==='undefined'){//your code here.};这太疯狂了,但对我来说,它不适用于
null
,而适用于
'null'
!!而且也不能使用
val==''
(在firefox控制台和live中进行测试…如果你有线索的话?有什么问题:if(val){}?
'
0
'0'
,以及其他一些配置是正确的if(val)//null undefined false或0此
==
运算符在这里工作得很好,为什么在与
null
进行比较时使用
=
?我认为这是您可以得到的最短时间…或创建您自己的函数。顺便说一句,
'0'
的计算结果不是
false
。但是
0
也同样如此
。此外,Yiding已经提供了此解决方案。您忘记了0,并更新了答案,以同时考虑字符串和数字0。忽略NaN值,此技术可能是最好的。
if(!val && val !== 0) {
  // code runs only when val == null, undefined, false, or empty string ""
}
var Boolify = require('node-boolify').Boolify;
if (!Boolify(val)) {
    //your instruction
}