Elegí esto de aquí
El valor indefinido es un valor primitivo utilizado cuando a una variable no se le ha asignado un valor.
El valor nulo es un valor primitivo que representa la referencia nula, vacía o inexistente.
Cuando declaras una variable a través de var y no le das un valor, tendrá el valor indefinido. Por sí solo, si intenta utilizar WScript.Echo () o alertar () este valor, no verá nada. Sin embargo, si agrega una cadena en blanco, de repente aparecerá:
var s;
WScript.Echo(s);
WScript.Echo("" + s);
Puede declarar una variable, establecerla como nula, y el comportamiento es idéntico, excepto que verá "nulo" impreso versus "indefinido". Esta es una pequeña diferencia de hecho.
Incluso puede comparar una variable que no está definida como nula o viceversa, y la condición será verdadera:
undefined == null
null == undefined
Sin embargo, se consideran dos tipos diferentes. Si bien undefined es un tipo en sí mismo, nulo se considera un valor de objeto especial. Puede ver esto usando typeof () que devuelve una cadena que representa el tipo general de una variable:
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
La ejecución del script anterior dará como resultado el siguiente resultado:
undefined
object
Independientemente de que sean diferentes tipos, seguirán actuando de la misma manera si intentas acceder a un miembro de cualquiera de ellos, por ejemplo, es decir, lanzarán una excepción. Con WSH, verá el temido "'varname' es nulo o no es un objeto" y eso si tiene suerte (pero ese es un tema para otro artículo).
Puede establecer explícitamente una variable para que no esté definida, pero le recomiendo que no lo haga. Recomiendo configurar solo las variables como nulas y dejar indefinido el valor de las cosas que olvidó configurar. Al mismo tiempo, realmente te animo a que siempre configures cada variable. JavaScript tiene una cadena de alcance diferente a la de los lenguajes de estilo C, lo que confunde fácilmente incluso a los programadores veteranos, y establecer variables como nulas es la mejor manera de evitar errores basados en él.
Otra instancia en la que verá una ventana emergente indefinida es cuando use el operador de eliminación. Aquellos de nosotros de un mundo C podría interpretar incorrectamente esto como destruir un objeto, pero no es así. Lo que hace esta operación es eliminar un subíndice de una matriz o un miembro de un objeto. Para las matrices no afecta la longitud, sino que ese subíndice ahora se considera indefinido.
var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);
El resultado del script anterior es:
0.) a
1.) undefined
2.) c
También recibirá una respuesta indefinida cuando lea un subíndice o miembro que nunca existió.
La diferencia entre nulo e indefinido es: JavaScript nunca establecerá nada en nulo, eso es generalmente lo que hacemos. Si bien podemos establecer variables como indefinidas, preferimos nulo porque no es algo que se haya hecho por nosotros. Cuando está depurando, esto significa que cualquier cosa establecida en nulo es suya y no JavaScript. Más allá de eso, estos dos valores especiales son casi equivalentes.
null
valor en JavaScript?