variable valor validar error comparar javascript

validar - valor undefined javascript



JavaScript: undefined!== undefined? (7)

NOTA: Según ECMAScript5.1, sección 15.1.1.3 , window.undefined es de solo lectura.

  • Los navegadores modernos implementan esto correctamente. por ejemplo: Safari 5.1, Firefox 7, Chrome 20, etc.
  • Indefinido sigue siendo modificable en: Chrome 14, ...

Cuando recientemente integé Facebook Connect con Tersus , inicialmente recibí los mensajes de Invalid Enumeration Value y Handler already exists cuando trato de llamar a las funciones de la API de Facebook.

Resultó que la causa del problema era

object.x === undefined

devuelve falso cuando no hay propiedad ''x'' en ''objeto''.

Trabajé alrededor del problema reemplazando la igualdad estricta con la igualdad regular en dos funciones de Facebook:

FB.Sys.isUndefined = function(o) { return o == undefined;}; FB.Sys.containsKey = function(d, key) { return d[key] != undefined;};

Esto hizo que las cosas funcionen para mí, pero parece sugerir algún tipo de colisión entre el código JavaScript de Facebook y el mío.

Que podria causar esto?

Sugerencia: está bien documentado que undefined == null while undefined !== null . Este no es el problema aquí. La pregunta es ¿cómo podemos llegar a ser undefined !== undefined .


De - JQuery_Core_Style_Guidelines

  • Variables globales:
    typeof variable === "undefined"

  • Variables locales:
    variable === undefined

  • Propiedades:
    object.prop === undefined


El problema es que undefined comparado con null usando == da verdadero. La comprobación común para undefined se hace así:

typeof x == "undefined"

esto asegura que el tipo de variable no está definido.


Es una mala práctica usar el operador == equality en lugar de === .

undefined === undefined // true null == undefined // true null === undefined // false

El object.x === undefined debe devolver true si x es una propiedad desconocida.

En el capítulo Partes malas de JavaScript: The Good Parts , Crockford escribe lo siguiente:

Si intenta extraer un valor de un objeto, y si el objeto no tiene un miembro con ese nombre, en su lugar, devuelve el valor indefinido.

Además de indefinido, JavaScript tiene un valor similar llamado null. Son tan similares que == piensa que son iguales. Eso confunde a algunos programadores al pensar que son intercambiables, lo que lleva a un código como

value = myObject[name]; if (value == null) { alert(name + '' not found.''); }

Está comparando el valor incorrecto con el operador equivocado. Este código funciona porque contiene dos errores que se anulan mutuamente. Esa es una forma loca de programar. Está mejor escrito así:

value = myObject[name]; if (value === undefined) { alert(name + '' not found.''); }


Me gustaría publicar información importante sobre undefined , que los principiantes podrían no conocer.

Mira el siguiente código:

/* * Consider there is no code above. * The browser runs these lines only. */ // var a; // --- commented out to point that we''ve forgotten to declare `a` variable if ( a === undefined ) { alert(''Not defined''); } else { alert(''Defined: '' + a); } alert(''Doing important job below'');

Si ejecuta este código, donde la variable a NUNCA HA SIDO DECLARADA usando var , obtendrá una EXCEPCIÓN DE ERROR y sorprendentemente no verá ninguna alerta.

En lugar de ''Hacer un trabajo importante a continuación'', su script se TERMINARÁ INESPERADAMENTE, lanzando una excepción no controlada en la primera línea.

Esta es la única forma a prueba de balas para buscar palabras clave undefined , que fue diseñado para tal fin:

/* * Correct and safe way of checking for `undefined`: */ if ( typeof a === ''undefined'' ) { alert( ''The variable is not declared in this scope, /n'' + ''or you are pointing to unexisting property, /n'' + ''or no value has been set yet to the variable, /n'' + ''or the value set was `undefined`. /n'' + ''(two last cases are equivalent, don/'t worry if it blows out your mind.'' ); } /* * Use `typeof` for checking things like that */

Este método funciona en todos los casos posibles.

El último argumento para usarlo es que undefined puede sobrescribirse potencialmente en versiones anteriores de Javascript:

/* @ Trollface @ */ undefined = 2; /* Happy debuging! */

Espero haber sido lo suficientemente claro.


Resulta que puedes establecer window.undefined a lo que quieras, y así obtener object.x !== undefined cuando object.x es el undefined real . En mi caso, inadvertidamente establecí indefinido a nulo.

La forma más fácil de ver esto suceder es:

window.undefined = null; alert(window.xyzw === undefined); // shows false

Por supuesto, esto no es probable que suceda. En mi caso, el error fue un poco más sutil, y fue equivalente a la siguiente situación.

var n = window.someName; // someName expected to be set but is actually undefined window[n]=null; // I thought I was clearing the old value but was actually changing window.undefined to null alert(window.xyzw === undefined); // shows false


UN). Nunca he tenido y nunca confiaré en ninguna herramienta que pretenda producir código sin la codificación del usuario, que se duplica cuando es una herramienta gráfica.

SEGUNDO). Nunca he tenido ningún problema con Facebook Connect. Todo sigue siendo un código JavaScript simple que se ejecuta en un navegador y undefined===undefined donde sea que se encuentre.

En resumen, debe proporcionar evidencia de que su object.x realmente no estaba definido y no es nulo o no, porque creo que es imposible que lo que está describiendo sea realmente el caso, sin ofender :) - Lo pondría dinero en el problema existente en el código de Tersus.


var a; typeof a === ''undefined''; // true a === undefined; // true typeof a === typeof undefined; // true typeof a === typeof sdfuwehflj; // true