JavaScript проверяет, является ли значение только неопределенным, нулевым или ложным - PullRequest
39 голосов
/ 27 июля 2011

Кроме создания функции, есть ли более короткий способ проверить, является ли значение undefined, null или false только в JavaScript?

Нижеприведенный оператор if эквивалентенв if(val===null && val===undefined val===false) Код работает нормально, я ищу более короткий эквивалент.

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

Выше val==null оценивается как true, когда val=undefined или val=null.

Я подумал, может быть, использовать побитовые операторы или какой-то другой обман.

Ответы [ 9 ]

33 голосов
/ 27 июля 2011

Ну, вы всегда можете "сдаться":)

function b(val){
    return (val==null || val===false);
}
13 голосов
/ 17 октября 2013

Я думаю, что лучший способ сделать это:

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

Это будет верно, если val равен false, NaN или undefined.

4 голосов
/ 29 декабря 2016

Я думаю, что вы ищете !!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

То же самое с undefined или 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 ""
}
2 голосов
/ 18 декабря 2015

Другое решение:

На основании документа логический объект вернет true, если значение не равно 0, неопределено, равно нулю и т. Д. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean

Если значение опущено или равно 0, -0, null, false, NaN, undefined или пустая строка (""), объект имеет начальное значение false.

So

if(Boolean(val))
{
//executable...
}
2 голосов
/ 14 января 2013

Один из способов сделать это так:

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

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

Я думаю, что это минимизирует количество операций с учетом ваших ограничений, делая проверку быстрой.

1 голос
/ 27 июля 2011

только ярлык для чего-то подобного, о котором я знаю, это

var val;
(val==null || val===false) ? false: true;
0 голосов
/ 08 января 2019

Попробуйте как ниже

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

См. node-boolify

0 голосов
/ 30 июня 2016

Используете? намного чище.

var ? function_if_exists() : function_if_doesnt_exist();
0 голосов
/ 12 марта 2016

Boolean (val) === false.Это сработало для меня, чтобы проверить, было ли значение ложным.

...