Я хотів перевірити, чи вказана змінна чи ні. Наприклад, наступне подає не визначену помилку
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"