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

JQuery/Javascript: проверьте, существует ли var

Возможный дубликат:
Как проверить, определена ли переменная в JavaScript? Есть ли стандартная функция для проверки нулевого, undefined или пустых переменных в JavaScript?

У меня есть script, который встречается в двух частях.

Первая часть устанавливает var:

var pagetype = "textpage";

Вторая часть - это простой оператор if:

if(pagetype == "textpage") {
//do something
};

Теперь вторая часть, оператор if, появляется на всех страницах моего сайта. Но первая часть, где объявлен var, появляется только на некоторых моих страницах.

На страницах без var я получаю эту ошибку:

Uncaught ReferenceError: pagetype is not defined

Итак, мой вопрос: существует ли способ с JavaScript или JQ, чтобы определить, существует ли вообще-то var (не только если у него есть данные, назначенные ему)?

Мне кажется, я просто использовал бы другой, если бы статут, например:

if ("a var called pagetypes exists")....
4b9b3361

Ответ 1

Я подозреваю, что на SO есть много таких ответов, но здесь вы идете:

if ( typeof pagetype !== 'undefined' && pagetype == 'textpage' ) {
  ...
}

Ответ 2

Вы можете использовать typeof:

if (typeof pagetype === 'undefined') {
    // pagetype doesn't exist
}

Ответ 3

Для вашего случая и для 99,9% всех остальных ответов elclanrs правильный.

Но поскольку undefined является допустимым значением, если кто-то должен был проверить неинициализированную переменную

var pagetype; //== undefined
if (typeof pagetype === 'undefined') //true

единственный 100% надежный способ определить, существует ли var, чтобы поймать исключение;

var exists = false;
try { pagetype; exists = true;} catch(e) {}
if (exists && ...) {}

Но я никогда не напишу это так.

Ответ 4

Для проверки существования существует два метода.

а. "property" in object

Этот метод проверяет цепочку прототипов для существования свойства.

б. object.hasOwnProperty( "property" )

Этот метод не подходит к цепочке прототипов для проверки существования свойства, он должен существовать в объекте, на который вы вызываете метод.

var x; // variable declared in global scope and now exists

"x" in window; // true
window.hasOwnProperty( "x" ); //true

Если мы тестировали, используя следующее выражение, оно возвращало бы false

typeof x !== 'undefined'; // false

Ответ 5

Перед каждым из ваших условных утверждений вы можете сделать что-то вроде этого:

var pagetype = pagetype || false;
if (pagetype === 'something') {
    //do stuff
}

Ответ 6

Невозможно определить, была ли указана переменная или нет, кроме попытки try..catch вызвать ошибку, если она не была объявлена. Тест вроде:

if (typeof varName == 'undefined') 

не сообщать вам, является ли varName переменной в области видимости, только это тестирование с возвратом типаof undefined. например.

var foo;
typeof foo == 'undefined'; // true
typeof bar == 'undefined'; // true

В приведенном выше примере вы не можете сказать, что foo был объявлен, но bar не был. Вы можете проверить глобальные переменные, используя in:

var global = this;
...
'bar' in global;  // false

Но глобальный объект является единственным объектом переменной *, к которому вы можете получить доступ, вы не можете получить доступ к объекту переменной любого другого контекста выполнения.

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

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