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

发布于 2024-11-26 04:56:53 字数 432 浏览 3 评论 0原文

除了创建函数之外,是否有更短的方法来仅在 JavaScript 中检查值是否为 undefinednullfalse

下面的 if 语句相当于 if(val===null && val===undefined val===false) 该代码工作正常,我正在寻找更短的等效代码。

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

val=undefinedval=null 时,以上 val==null 的计算结果均为 true。

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

Other than creating a function, is there a shorter way to check if a value is undefined,null or false only in JavaScript?

The below if statement is equivalent to if(val===null && val===undefined val===false)
The code works fine, I'm looking for a shorter equivalent.

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

Above val==null evaluates to true both when val=undefined or val=null.

I was thinking maybe using bitwise operators, or some other trickery.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

近箐 2024-12-03 04:56:53

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

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

Well, you can always "give up" :)

function b(val){
    return (val==null || val===false);
}
雨落星ぅ辰 2024-12-03 04:56:53

我认为您正在寻找的是 !!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 ""
}

I think what you're looking for is !!val==false which can be turned to !val (even shorter):

You see:

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

That works by flipping the value by using the ! operator.

If you flip null once for example like so :

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

If you flip it twice like so :

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

Same with undefined or false.

Your code:

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

would then become:

if(!val) {
  ;
}

That would work for all cases even when there's a string but it's length is zero.
Now if you want it to also work for the number 0 (which would become false if it was double flipped) then your if would become:

if(!val && val !== 0) {
  // code runs only when val == null, undefined, false, or empty string ""
}
清泪尽 2024-12-03 04:56:53

我认为最好的方法是:

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

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

The best way to do it I think is:

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

This will be true if val is false, NaN, or undefined.

蓬勃野心 2024-12-03 04:56:53

另一种解决方案:

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

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

所以

if(Boolean(val))
{
//executable...
}

Another solution:

Based on the document, Boolean object will return true if the value is not 0, undefined, null, etc. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean

If value is omitted or is 0, -0, null, false, NaN, undefined, or the empty string (""), the object has an initial value of false.

So

if(Boolean(val))
{
//executable...
}
拥醉 2024-12-03 04:56:53

一种方法是这样的:

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

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

我认为考虑到您的限制使检查速度更快,它可以最大限度地减少操作数量。

One way to do it is like that:

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

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

I think it minimizes the number of operations given your restrictions making the check fast.

清欢 2024-12-03 04:56:53

据我所知,此类事情的唯一捷径是

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

only shortcut for something like this that I know of is

var val;
(val==null || val===false) ? false: true;
深海夜未眠 2024-12-03 04:56:53

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

Boolean(val) === false. This worked for me to check if value was falsely.

江湖正好 2024-12-03 04:56:53

使用 ?干净多了。

var ? function_if_exists() : function_if_doesnt_exist();

Using ? is much cleaner.

var ? function_if_exists() : function_if_doesnt_exist();
吃颗糖壮壮胆 2024-12-03 04:56:53

尝试如下

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

参考 node-boolify

Try like Below

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

Refer node-boolify

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文