Lime
Lime

Reputation: 13524

JavaScript check if value is only undefined, null or false

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.

Upvotes: 54

Views: 176396

Answers (9)

Ratan Uday Kumar
Ratan Uday Kumar

Reputation: 6482

Try like Below

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

Refer node-boolify

Upvotes: -1

SudoPlz
SudoPlz

Reputation: 23173

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 ""
}

Upvotes: 20

Pedro Pereira
Pedro Pereira

Reputation: 490

Using ? is much cleaner.

var ? function_if_exists() : function_if_doesnt_exist();

Upvotes: 0

Brigette
Brigette

Reputation: 57

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

Upvotes: 1

Yiding
Yiding

Reputation: 2944

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...
}

Upvotes: 3

David Hoffman
David Hoffman

Reputation: 199

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.

Upvotes: 19

Eugene Lazutkin
Eugene Lazutkin

Reputation: 43956

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.

Upvotes: 2

hugomg
hugomg

Reputation: 69924

Well, you can always "give up" :)

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

Upvotes: 41

Joseph Marikle
Joseph Marikle

Reputation: 78520

only shortcut for something like this that I know of is

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

Upvotes: 1

Related Questions