JQuery / Javascript: проверьте, существует ли var [дубликат]


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

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

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

var pagetype = "textpage";

вторая часть-это простое утверждение if:

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

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

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

Uncaught ReferenceError: pagetype is not defined

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

Я представляю, что я бы просто использовал другое утверждение if, например:

if ("a var called pagetypes exists")....
6 56

6 ответов:

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

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

можно использовать typeof:

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

для вашего случая, и 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 && ...) {}

но я бы никогда не написать так

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

a."property" in object

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

b.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

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

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

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

if (typeof varName == 'undefined') 

не говорите вам, если varName - это переменная в области видимости, только что тестирование с помощью оператора typeof возвращает "undefined". например,

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

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

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

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

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

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