Я хотел проверить, определена ли переменная или нет. Например, следующее выдает не определенную ошибку
alert( x );
Как я могу поймать эту ошибку?
Я хотел проверить, определена ли переменная или нет. Например, следующее выдает не определенную ошибку
alert( x );
Как я могу поймать эту ошибку?
Ответы:
В JavaScript null
это объект. Есть другое значение для вещей, которые не существуют undefined
. DOM возвращается null
почти во всех случаях, когда ему не удается найти какую-либо структуру в документе, но в самом JavaScript undefined
это значение используется.
Во-вторых, нет, прямого эквивалента нет. Если вы действительно хотите проверить, для каких null
:
if (yourvar === null) // Does not execute if yourvar is `undefined`
Если вы хотите проверить, существует ли переменная, это можно сделать только с помощью try
/ catch
, поскольку она typeof
будет обрабатывать необъявленную переменную и переменную, объявленную со значением undefined
как эквивалентную.
Но, чтобы проверить, объявлена ли переменная и нет ли она undefined
:
if (yourvar !== undefined) // Any scope
Ранее необходимо было безопасно использовать typeof
оператор для проверки неопределенности, потому что можно было переназначить undefined
как переменную. Старый способ выглядел так:
if (typeof yourvar !== 'undefined') // Any scope
Вопрос undefined
повторных назначаемый был зафиксирован в ECMAScript 5, который был выпущен в 2009 году Теперь вы можете безопасно использовать ===
и !==
для тестирования на undefined
без использования , typeof
как undefined
были только для чтения в течение некоторого времени.
Если вы хотите знать, существует ли член независимо, но не волнует его значение:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
Если вы хотите узнать, является ли переменная истинной :
if (yourvar)
typeof
оператор ( typeof null == 'object'
). null
Значение является примитивным значением , которое является единственным значением типа Null .
Единственный способ действительно проверить, является ли переменная, undefined
состоит в следующем. Помните, что undefined - это объект в JavaScript.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
Некоторые другие решения в этом потоке приведут вас к мысли, что переменная не определена, даже если она была определена (например, со значением NULL или 0).
ReferenceError
.
undefined
, что объект в javascript - это дезинформация. Относится ли это утверждение к вашему ответу? Это значение undefined
типа undefined
, присвоенное глобальному идентификатору имени undefined
.
undefined
только для чтения с ES5. Вы можете безопасно проверить для использования неопределённых if (x === undefined) {...}
или при помощи стенографии , как это: if (x === void 0)
.
Технически, правильным решением является (я считаю):
typeof x === "undefined"
Вы можете иногда лениться и использовать
x == null
но это позволяет и неопределенной переменной x, и переменной x, содержащей null, возвращать true.
var x;
и typeof x;
вы получите "undefined"
точно так же, как если бы вы это сделалиtypeof lakjdflkdsjflsj;
Еще более простая и более краткая версия была бы:
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.');
}
}
Вы также можете использовать троичный условный оператор:
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 a = false;
? Вы должны проверить это, если a===undefined
вместо этого
var x;
выполнение выше приведёт к ошибке
!a
проверять истину для undefined
, он также проверяет истину для 0
и null
и false
. Это очень неправильно и должно быть удалено.
Я часто использую самый простой способ:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
РЕДАКТИРОВАТЬ:
Без инициализации переменной будет выдано исключение "Uncaught ReferenceError: переменная не определена ..."
Uncaught ReferenceError: variable is not defined
variable
определяется var variable;
. И этот фрагмент будет переопределен variable
в локальной области видимости. Это может нарушить логику, которая ожидает доступа к замыканию или глобальной переменной. Т.е.:var variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
Другим потенциальным «решением» является использование window
объекта. Это позволяет избежать проблемы ошибки ссылки в браузере.
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
. Это не будет делать это.
Ошибка говорит вам, что x
даже не существует! Он не был объявлен , что отличается от присвоения значения.
var x; // declaration
x = 2; // assignment
Если бы вы заявили x
, вы не получите ошибку. Вы получите предупреждение, в котором говорится, undefined
что x
существует / было объявлено, но ему не присвоено значение.
Чтобы проверить, была ли переменная объявлена, вы можете использовать typeof
любой другой метод проверки, существует ли переменная, которая вызовет ту же ошибку, которую вы получили изначально.
if(typeof x !== "undefined") {
alert(x);
}
Это проверка типа значения, хранящегося в x
. Он вернется только undefined
когда x
не была объявлена или , если он уже был объявлен и еще не был назначен.
typeof
оператор.
В void
возвращаете оператора undefined
для любого аргумента / выражения , переданного ему. так что вы можете проверить против результата ( на самом деле некоторые minifiers изменить код от undefined
до , void 0
чтобы сэкономить пару символов)
Например:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
и мышление undefined
может быть переназначено, что было невозможно в течение десятилетия.
undefined
, потому что Бог знает только, по какой причине использование void 0
всегда вернется undefined
независимо.
Мы можем проверить undefined
следующим образом
var x;
if (x === undefined) {
alert("x is undefined");
} else {
alert("x is defined");
}
Принятый ответ правильный. Просто хотел добавить еще один вариант. Вы также можете использовать 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
блоке, который немного запутан, поскольку создает область уровня блока. И, конечно, пример чрезвычайно упрощен, чтобы ответить на заданный вопрос, он не охватывает лучшие практики обработки ошибок;).
Я использую небольшую функцию, чтобы проверить, была ли объявлена переменная, которая действительно уменьшает количество беспорядка в моих файлах 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 }
return typeof el !== "undefined" && typeof el.val() !== "undefined"