Как проверить неопределенную переменную в JavaScript

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

alert( x );

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

15 ответов

Решение

В 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

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

if (yourvar !== undefined)

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

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

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

if (yourvar)

Источник

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

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

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

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

typeof x === "undefined"

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

x == null

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

Еще более простая и более краткая версия была бы:

if (!x) {
   //Undefined
}

ИЛИ ЖЕ

if (typeof x !== "undefined") {
    //Do something since x is defined.
}

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

function doSomething(variable)
{
    var undef;

    if(variable === undef)
    {
         alert('Hey moron, define this bad boy.');
    }
}

Извините за некромантию, но большинство ответов здесь путают «неопределенный» и «не определенный».

  1. Undefined - переменная объявлена, но ее значение не определено.

  2. Не определено — переменная даже не объявлена.

Единственный безопасный способ проверить оба случая — использовать typeof myVar === 'undefined'

myVar === undefinedбудет проверять только случай номер 1. Все равно выдаст «myVar не определен», если myVarдаже не декларируется. ОП специально спрашивает о случае «даже не определенного».

PS Я понимаю, что «случай 2» становится редкостью в современном мире ES6, но некоторые старые унаследованные компоненты все еще живут в прошлом.

Ошибка говорит вам, что x даже не существует! Он не был объявлен, что отличается от присвоения значения.

var x; // declaration
x = 2; // assignment

Если вы объявили x, вы не получите ошибку. Вы получите предупреждение, которое говорит undefined так как x существует / был объявлен, но ему не было присвоено значение.

Чтобы проверить, была ли переменная объявлена, вы можете использовать typeof любой другой метод проверки существования переменной вызовет ту же ошибку, что и изначально.

if(typeof x  !==  "undefined") {
    alert(x);
}

Это проверка типа значения, хранящегося в x, Вернется только undefined когда x не был объявлен ИЛИ, если он был объявлен и еще не был назначен.

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

Например:

void 0
// undefined

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

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

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

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

isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false

Принятый ответ правильный. Просто хотел добавить еще один вариант. Вы также можете использовать try ... catch блок для обработки этой ситуации. Причудливый пример:

var a;
try {
    a = b + 1;  // throws ReferenceError if b is not defined
} 
catch (e) {
    a = 1;      // apply some default behavior in case of error
}
finally {
    a = a || 0; // normalize the result in any case
}

Быть осведомленным catch блок, который немного грязный, так как создает область уровня блока. И, конечно, пример чрезвычайно упрощен, чтобы ответить на заданный вопрос, он не охватывает лучшие практики обработки ошибок;).

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

if (window.x) {
    alert('x exists and is truthy');
} else {
    alert('x does not exist, or exists and is falsy');
}

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

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);

Я часто использую самый простой способ:

var variable;
if (variable === undefined){
    console.log('Variable is undefined');
} else {
    console.log('Variable is defined');
}

РЕДАКТИРОВАТЬ:

Без инициализации переменной будет выдано исключение "Uncaught ReferenceError: переменная не определена..."

Мы можем проверить undefined следующее

var x; 

if (x === undefined) {
    alert("x is undefined");
} else {
     alert("x is defined");
}

Я использую небольшую функцию, чтобы проверить, была ли объявлена ​​переменная, что действительно уменьшает количество беспорядка в моих файлах 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 }
Другие вопросы по тегам