2012-02-07 10 views
8

Tengo un fragmento de código que comprueba la existencia de una variable, usando una instrucción if como en el siguiente ejemplo. Necesito hacer una cosa si la var se establece, una cosa diferente si no es así. En un determinado caso de prueba, la var necesitaba ser puesto a 0, pero eso es lo mismo es tener una var desactivada en JS, al parecer:JS: compruebe la existencia de una var que es igual a 0

var toMatch; 
toMatch = 0; 
if (!toMatch) { 
    document.write("no"); 
} else { 
    document.write(toMatch); 
} 

// html is "no" 

jsFiddle

Así que mi problema es, ¿cómo puedo prueba para una var si su valor es legítimamente cero. Debo señalar, que en mi función los valores posibles que se aprobarán son 0-40 +.

En el pasado, he utilizado un trabajo como establecer el valor inicial en un número lo suficientemente alto como para que no sea transferido a la función, pero eso me parece algo extraño. Hay una mejor manera de hacerlo?

Respuesta

14
var toMatch; 
toMatch = 0; 
if (toMatch === 0) { // or !== if you're checking for not zero 
    document.write("no"); 
} else { 
    document.write(toMatch); 
} 

toMatch === 0 comprobará cero.

toMatch === undefined comprobará si hay undefined

los iguales triples son estrictas operadores de comparación para este tipo de escenario. Ver esta bendita pregunta: Difference between == and === in JavaScript

+0

Tenga en cuenta que 'undefined' no es una palabra clave y puede ser teóricamente sobrescrito Recomendamos usar 'if (typeof (toMatch)! ==" undefined ")' o cerrar el código sobre una función anónima con un parámetro extra para 'undefined'. –

+1

Es posible que también desee mencionar que para verificar la existencia (no necesariamente un valor específico) podría hacer: 'if (typeof toMatch! == 'undefined') {};' –

+0

También puede usar '(void 0)' en lugar de 'undefined' si eres realmente paranoico :) –

0

Javascript es un poco divertido cuando se trata de valores y controles booleanos. Sugiero leer sobre Truthy and Falsey en Javascript.

se debe utilizar el operador de desigualdad identidad !==:

var toMatch; 
toMatch = 0; 
if (toMatch !== 0) { 
    document.write("no"); 
} else { 
    document.write(toMatch); 
} 

También vale la pena entender the differences between == and ===.

1

Puede ver si un nombre no está definido con:

if (typeof bad_name === "undefined") { 
+0

tipo de es un operador, NO es un método. Debería ser 'if (typeof bad_name === undefined)' – Relic

+0

Correcto, reparado. ¡Aprendí algo hoy! :) –

+0

Cuando vi por primera vez esa notación, yo también era WTF ... te cuento un poco sobre el casting y si profundizas más te ayudará con el análisis de propiedades también. – Relic

1

En lugar de

if (toMatch) 

uso

if (toMatch == null) 
+0

-1 porque siempre debe usar absolutamente igual === cuando se compara con null/undefined (palabras clave) – Relic

+1

No, 'x == null' es equivalente a' x === null || x === undefined'. Las comparaciones con 'null' son el único caso en el que debe usar' == '(por ejemplo, la guía de estilo jQuery respalda esta práctica). El hecho de que las palabras reservadas sean nulas e indefinidas es irrelevante. –

+0

Sé esto, esto es solo vago ... y está permitiendo posibles excepciones, a menos que este sea el comportamiento específico que está buscando. Las buenas prácticas de JavaScript siempre dicen que el uso es absolutamente igual, pero he encontrado 1 o 2 lugares en todo mi código que tiene errores en IE, así que tengo que usar relativamente igual. Y, por supuesto, jQuery lo respalda, es la última biblioteca multiplataforma. Es por eso que tienen una participación tan grande en la cuota de mercado. – Relic

Cuestiones relacionadas