Я хотів перевірити, чи вказана змінна чи ні. Наприклад, наступне подає не визначену помилку
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
це зробити наступне. Пам'ятайте, що невизначений - це об’єкт у 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.
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
для будь-якого аргументу / вирази , переданого йому. тож ви можете перевірити результат (насправді деякі мініфішери змінюють ваш код з 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"