Как проверить неопределенную переменную в JavaScript - PullRequest
838 голосов
/ 13 мая 2009

Я хотел проверить, определена ли переменная или нет. Например, следующее выдает не определенную ошибку

alert( x );

Как я могу поймать эту ошибку?

Ответы [ 14 ]

1594 голосов
/ 13 мая 2009

В JavaScript null - это объект. Есть другое значение для вещей, которые не существуют, undefined. DOM возвращает null почти во всех случаях, когда ему не удается найти какую-либо структуру в документе, но в самом JavaScript undefined является используемым значением.

Во-вторых, нет, прямого эквивалента нет. Если вы действительно хотите проверить специально для null, выполните:

if (yourvar === null) // Does not execute if yourvar is `undefined`

Если вы хотите проверить, существует ли переменная, это можно сделать только с помощью try / catch, поскольку typeof будет обрабатывать необъявленную переменную и переменную, объявленную со значением undefined, как эквивалентные.

Но, чтобы проверить, объявлена ​​ли переменная и не undefined:

if (typeof yourvar !== 'undefined') // Any scope

Осторожно, это чепуха, потому что может быть переменная с именем undefined:

if (yourvar !== undefined)

Если вы хотите знать, существует ли член самостоятельно, но не волнует его значение:

if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance

Если вы хотите узнать, является ли переменная истинной :

if (yourvar)

Источник

322 голосов
/ 13 мая 2009

Единственный способ действительно проверить, является ли переменная undefined, это сделать следующее. Помните, что undefined - это объект в JavaScript.

if (typeof someVar === 'undefined') {
  // Your variable is undefined
}

Некоторые другие решения в этом потоке приведут вас к мысли, что переменная не определена, даже если она была определена (например, со значением NULL или 0).

65 голосов
/ 13 мая 2009

Технически, правильным решением является (я считаю):

typeof x === "undefined"

Иногда можно лениться и использовать

x == null

но это позволяет и неопределенной переменной x, и переменной x, содержащей null, возвращать true.

16 голосов
/ 13 мая 2009

Еще более простой и более сокращенной версией будет:

if (!x) {
   //Undefined
}

OR

if (typeof x !== "undefined") {
    //Do something since x is defined.
}
15 голосов
/ 13 мая 2009

Я часто делал:

function doSomething(variable)
{
    var undef;

    if(variable === undef)
    {
         alert('Hey moron, define this bad boy.');
    }
}
3 голосов
/ 13 ноября 2017

Другим потенциальным «решением» является использование объекта window. Это позволяет избежать проблемы ошибки ссылки в браузере.

if (window.x) {
    alert('x exists and is truthy');
} else {
    alert('x does not exist, or exists and is falsy');
}
3 голосов
/ 12 февраля 2016

Вы также можете использовать троичный условный оператор:

var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);

//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
0 голосов
/ 31 января 2019

Просто сделайте что-то вроде ниже:

function isNotDefined(value) {
  return typeof value === "undefined";
}

и назовите это как:

isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false
0 голосов
/ 05 июля 2018

Я использую небольшую функцию, чтобы проверить, была ли объявлена ​​переменная, которая действительно уменьшает количество беспорядка в моих файлах javascript. Я добавляю проверку значения, чтобы убедиться, что переменная не только существует, но и ей присвоено значение. Второе условие проверяет, была ли переменная также создана, потому что, если переменная была определена, но не создана (см. Пример ниже), она все равно выдаст ошибку, если вы попытаетесь сослаться на ее значение в своем коде.

Не создан - var my_variable; Создан - var my_variable = "";

function varExists(el) { 
  if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) { 
    return true; 
  } else { 
    return false; 
  } 
}

Затем вы можете использовать условный оператор, чтобы проверить, что переменная была определена И создана, как это ...

if ( varExists(variable_name) ) { // checks that it DOES exist } 

или чтобы проверить, что оно не было определено и не было использовано ...

if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
0 голосов
/ 02 июля 2018

Оператор void возвращает undefined для любого переданного ему аргумента / выражения. так что вы можете проверить результат (на самом деле некоторые минификаторы меняют код с undefined на void 0, чтобы сохранить пару символов)

Например:

void 0
// undefined

if (variable === void 0) {
    // variable is undefined
}
...