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 ответов:
Я подозреваю, что есть много ответов, как это на так, но здесь вы идете:
if ( typeof pagetype !== 'undefined' && pagetype == 'textpage' ) { ... }
для вашего случая, и 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но глобальный объект единственный объект переменной* вы можете получить доступ, вы не можете получить доступ к объекту переменной любого другого контекста выполнения.
решение состоит в том, чтобы всегда объявлять переменные в соответствующем контексте.
- глобальный объект на самом деле не является переменным объектом, он просто имеет свойства, соответствующие глобальным переменным и обеспечивающие доступ к ним, поэтому он просто кажется одним.