2010-04-20 10 views
24

? Estoy tratando de verificar si una variable de Javascript no está definida.El valor de matriz de Javascript no está definido ... ¿cómo puedo probar

Verá que no estoy esperando que el valor de predQuery [preId] sea 'indefinido' si no recibo primero una alerta que dice "es increíble". Pero lo hago a menudo, así que supongo que mi declaración

predQuery[preId]=='undefined') 

no coincide con los elementos definidos correctamente.

if((predQuery.length < preId) || (predQuery[preId]=="") || (predQuery[preId]=='undefined')){ 
    alert("its unbelievable"); 
    alert(predQuery[preId]); 
    queryPreds[variables] = preId; 
    queryObjs[variables] = objId; 
    predQuery[preId] = variables; 
} 
else { 
    alert(predQuery[preId]); 
    var predIndex = predQuery[preId]; 
    queryPreds[predIndex] = preId; 
    queryObjs[predIndex] = objId; 
} 

Puedo agregar más código si es necesario.

+0

he utilizado (typeof (predQuery [preId]) == 'indefinido') como mi cláusula en mi si declaración. – Ankur

+0

Si es así, no se muestra. – deceze

+0

@deceze ... Quise decir eso, he cambiado mi código. No he editado la pregunta, sin embargo, eso no ayudará a las personas futuras con el mismo problema. – Ankur

Respuesta

55

array[index] == 'undefined' compara el valor del índice de la matriz a la cadena "indefinido".
Probablemente esté buscando typeof array[index] == 'undefined', que compara tipo.

+3

+1 comparando con el tipo inmutable en lugar del tipo mutable 'undefined' –

+2

Esto solo no puede distinguir entre' [undefined] [0] 'y' [] [0] '. Si hay alguna posibilidad de que tu matriz esté vacía, es probable que te encuentres con este escenario. – sighrobot

1

Comprobar si

if (predQuery[preId] === undefined) 

Utilice la estricta igual al operador. Ver comparison operators

+1

casi - pero la mejor práctica es como dice deceze, compare typeof porque eso no se puede redefinir como puede ser undefined. –

+1

No es infalible, ya que se puede definir indefinido. Simplemente con 'window.undefined =" lolz ";' – Warty

+5

Es imposible escribir JavaScript que proteja contra cada edificio que se redefina (casi cualquier cosa puede ser). No recomiendo hacer que el código sea menos legible solo para evitar redefiniciones. 'typeof' tiene otro uso, para detectar tipos de datos en scripts de ventana cruzada, pero eso no se aplica a' undefined' de todos modos. – bobince

1

intento: typeof(predQuery[preId])=='undefined'
o más en general: typeof(yourArray[yourIndex])=='undefined'
Usted está comparando "indefinido" para no definido, que devuelve false =)

10

Estás mirando que el índice de matriz contiene una cadena "undefined", que o bien debe typeof utilizar el operador:

typeof predQuery[preId] == 'undefined' 

O utilice el undefined propiedad global:

predQuery[preId] === undefined 

La primera manera es más seguro , debido a que la propiedad global undefined se puede escribir, y se puede cambiar a cualquier otro valor.

4

hay más (muchas) formas de Roma:

//=>considering predQuery[preId] is undefined: 
predQuery[preId] === undefined; //=> true 
undefined === predQuery[preId] //=> true 
predQuery[preId] || 'it\'s unbelievable!' //=> it's unbelievable 
var isdef = predQuery[preId] ? predQuery[preId] : null //=> isdef = null 

saludos!

6
predQuery[preId]=='undefined' 

se está probando con la cadena 'undefined'; confundiste esta prueba con la prueba typeof que devolvería una cadena. Es probable que decir que las pruebas contra el valor especial undefined:

predQuery[preId]===undefined 

Nota al operador estricta igualdad para evitar la coincidencia general-no deseada null==undefined.

Sin embargo, hay dos formas de obtener un valor undefined: o bien preId no es miembro de predQuery, o es un miembro, pero tiene un valor fijado en el valor especial undefined.A menudo, solo quieres verificar si está presente o no; en ese caso el operador in es más apropiado:

!(preId in predQuery) 
0

Este código funciona muy bien

function isUndefined(array, index) { 
    return ((String(array[index]) == "undefined") ? "Yes" : "No"); 
} 
+1

¿Por qué usas == en lugar de ===? – leofontes