javascript - tipos - var jquery
JQuery/Javascript: compruebe si existe var (6)
Antes de cada una de sus declaraciones condicionales, podría hacer algo como esto:
var pagetype = pagetype || false;
if (pagetype === ''something'') {
//do stuff
}
Posible duplicado:
¿Cómo puedo verificar si una variable está definida en JavaScript?
¿Existe una función estándar para verificar las variables nulas, indefinidas o en blanco en JavaScript?
Tengo un script que ocurre en dos partes.
La primera parte configura una var:
var pagetype = "textpage";
La segunda parte es una simple declaración if:
if(pagetype == "textpage") {
//do something
};
Ahora la segunda parte, la declaración if, aparece en todas las páginas de mi sitio. Pero la primera parte, donde se declara la var, solo aparece en algunas de mis páginas.
En las páginas sin var, naturalmente obtengo este error:
Uncaught ReferenceError: pagetype is not defined
Entonces mi pregunta es: ¿hay alguna manera con JavaScript o JQ para detectar si existe una var (no solo si tiene datos asignados)?
Me estoy imaginando que usaría otra declaración, por ejemplo:
if ("a var called pagetypes exists")....
Es imposible determinar si una variable ha sido declarada o no, salvo usar try..catch para causar un error si no se ha declarado. Prueba como:
if (typeof varName == ''undefined'')
no le diga si varName
es una variable en el alcance, solo que las pruebas con typeof no están definidas. p.ej
var foo;
typeof foo == ''undefined''; // true
typeof bar == ''undefined''; // true
En lo anterior, no se puede decir que foo fue declarado pero que el bar no lo fue. Puede probar las variables globales usando in
:
var global = this;
...
''bar'' in global; // false
Pero el objeto global es el único objeto variable * al que puede acceder, no puede acceder al objeto variable de ningún otro contexto de ejecución.
La solución es declarar siempre las variables en un contexto apropiado.
- El objeto global no es realmente un objeto variable, solo tiene propiedades que coinciden con las variables globales y proporciona acceso a ellas, por lo que solo parece ser una.
Para probar la existencia, hay dos métodos.
a. "property" in object
Este método verifica la cadena prototipo para la existencia de la propiedad.
segundo. object.hasOwnProperty( "property" )
Este método no sube la cadena de prototipos para verificar la existencia de la propiedad, debe existir en el objeto al que llama el método.
var x; // variable declared in global scope and now exists
"x" in window; // true
window.hasOwnProperty( "x" ); //true
Si estuviéramos probando usando la siguiente expresión, devolvería falso
typeof x !== ''undefined''; // false
Para su caso, y el 99.9% de las respuestas de otros elclanrs
es correcto.
Pero como undefined
es un valor válido, si alguien fuera a probar una variable no inicializada
var pagetype; //== undefined
if (typeof pagetype === ''undefined'') //true
la única forma 100% confiable de determinar si existe una var es capturar la excepción;
var exists = false;
try { pagetype; exists = true;} catch(e) {}
if (exists && ...) {}
Pero nunca lo escribiría de esta manera
Puedes usar typeof
:
if (typeof pagetype === ''undefined'') {
// pagetype doesn''t exist
}
Sospecho que hay muchas respuestas como esta en SO, pero aquí tienes:
if ( typeof pagetype !== ''undefined'' && pagetype == ''textpage'' ) {
...
}