Как проверить неопределенную или нулевую переменную в JavaScript? - PullRequest
452 голосов
/ 01 апреля 2010

Мы часто используем следующий код в нашем коде JavaScript

if (typeof(some_variable) != 'undefined' && some_variable != null)
{
    // Do something with some_variable
}

Есть ли менее подробный способ проверки с таким же эффектом?

Согласно некоторым форумам и литературе, просто следующее должно иметь такой же эффект.

if (some_variable)
{
    // Do something with some_variable
}

К сожалению, Firebug оценивает такой оператор как ошибку во время выполнения, когда some_variable не определен, тогда как первый из них просто подходит Это только (нежелательное) поведение Firebug или действительно есть какая-то разница между этими двумя способами?

Ответы [ 19 ]

3 голосов
/ 17 апреля 2014

Как уже упоминалось в одном из ответов, вам может повезти, если вы говорите о переменной, имеющей глобальную область видимости. Как вы, возможно, знаете, переменные, которые вы определяете глобально, как правило, добавляются к объекту windows. Вы можете воспользоваться этим фактом, поэтому допустим, что вы обращаетесь к переменной с именем bleh, просто используйте оператор с двойным инвертированием (!!)

!!window['bleh'];

Это вернет false, пока bleh не был объявлен и ему не присвоено значение.

2 голосов
/ 16 июля 2018

Чтобы понять, давайте проанализируем, какое будет значение, возвращаемое Javascript Engine при преобразовании undefined, null и '' (также пустая строка). Вы можете непосредственно проверить это на своей консоли разработчика.

enter image description here

Вы можете видеть, что все преобразуются в ложные, что означает, что все эти три предполагают «отсутствие существования» в javascript. Так что вам не нужно явно проверять все три в вашем коде, как показано ниже.

if (a === undefined || a === null || a==='') {
    console.log("Nothing");
} else {
    console.log("Something");
}

Также я хочу отметить еще одну вещь.

Каким будет результат Boolean (0)?

Конечно, ложь. Это создаст ошибку в вашем коде, когда 0 является допустимым значением ожидаемого результата. Поэтому, пожалуйста, убедитесь, что вы проверили это при написании кода.

2 голосов
/ 27 февраля 2018

Откройте Инструменты разработчика в своем браузере и просто попробуйте код, показанный на рисунке ниже.

Img1 Img2

2 голосов
/ 19 октября 2017

независимо от того, гггг не определено или равно нулю, будет возвращено значение true

if (typeof yyy == 'undefined' || !yyy) {
    console.log('yes');
} else {
    console.log('no');
}

да

if (!(typeof yyy == 'undefined' || !yyy)) {
    console.log('yes');
} else {
    console.log('no');
}
нет

нет

1 голос
/ 29 января 2019

вот еще один способ использования массива. includes () метод:

[undefined, null].includes(value)
0 голосов
/ 17 января 2014

Вы должны определить функцию этой формы:

validate = function(some_variable){
    return(typeof(some_variable) != 'undefined' && some_variable != null)
}
0 голосов
/ 25 июня 2014

Тестирование нулевой (if (value == null)) или ненулевой (if (value != null)) менее многословно, чем тестирование определения состояния переменной.

Более того, проверка if (value) (или if( obj.property)) на предмет наличия вашей переменной (или свойства объекта) завершается неудачей, если она определена с логическим значением false. Будьте бдительны:)

0 голосов
/ 14 мая 2019

Как и у вас, вы можете сделать что-то вроде

if (some_variable === undefined || some_variable === null) { do stuff }

0 голосов
/ 24 июня 2015

Оба значения можно легко различить с помощью оператора строгого сравнения:

Рабочий пример на:

http://www.thesstech.com/tryme?filename=nullandundefined

Пример кода:

function compare(){
    var a = null; //variable assigned null value
    var b;  // undefined
    if (a === b){
        document.write("a and b have same datatype.");
    }
    else{
        document.write("a and b have different datatype.");
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...