Подтвердить что ты не робот

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

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

alert( x );

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

4b9b3361

Ответ 1

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

Источник

Ответ 2

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

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

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

Ответ 3

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

typeof x === "undefined"

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

x == null

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

Ответ 4

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

if (!x) {
   //Undefined
}

ИЛИ

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

Ответ 5

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

function doSomething(variable)
{
    var undef;

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

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

EDIT:

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

Ответ 9

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

var x; 

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

Ответ 10

Принятый ответ правильный. Просто хотел добавить еще один вариант. Вы также можете использовать блок 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, который является немного беспорядочным, поскольку он создает область уровня блока. И, конечно, пример чрезвычайно упрощен для ответа на заданный вопрос, он не охватывает лучшие методы обработки ошибок;).

Ответ 11

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

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

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

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

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

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

Ответ 12

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

Например:

void 0
// undefined

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

Ответ 13

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

Не var my_variable; - 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 }

Ответ 14

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

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

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

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