Eu escolhi isso daqui
O valor indefinido é um valor primitivo usado quando uma variável não foi atribuída a um valor.
O valor nulo é um valor primitivo que representa a referência nula, vazia ou inexistente.
Quando você declara uma variável através de var e não atribui um valor a ela, ela terá o valor indefinido. Por si só, se você tentar WScript.Echo () ou alertar () esse valor, não verá nada. No entanto, se você anexar uma string em branco a ela, de repente ela aparecerá:
var s;
WScript.Echo(s);
WScript.Echo("" + s);
Você pode declarar uma variável, defini-la como nula e o comportamento é idêntico, exceto que você verá "nulo" impresso versus "indefinido". Esta é realmente uma pequena diferença.
Você pode até comparar uma variável indefinida como nula ou vice-versa, e a condição será verdadeira:
undefined == null
null == undefined
Eles são, no entanto, considerados dois tipos diferentes. Enquanto indefinido é um tipo exclusivo, nulo é considerado um valor de objeto especial. Você pode ver isso usando typeof (), que retorna uma string que representa o tipo geral de uma variável:
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
A execução do script acima resultará na seguinte saída:
undefined
object
Independentemente de serem tipos diferentes, eles ainda agirão da mesma forma se você tentar acessar um membro de um deles, por exemplo, ou seja, eles lançarão uma exceção. Com o WSH, você verá que o temido "'varname' é nulo ou não é um objeto" e isso se você tiver sorte (mas esse é um tópico para outro artigo).
Você pode definir explicitamente uma variável como indefinida, mas eu não aconselho isso. Eu recomendo apenas definir variáveis como nulas e deixar indefinido o valor para as coisas que você esqueceu de definir. Ao mesmo tempo, recomendo que você sempre defina todas as variáveis. O JavaScript tem uma cadeia de escopo diferente da linguagem C, confundindo facilmente até os programadores veteranos e definir variáveis como nulo é a melhor maneira de evitar bugs com base nele.
Outra instância em que você verá um pop-up indefinido é ao usar o operador de exclusão. Aqueles de nós do mundo C podem interpretar incorretamente isso como destruindo um objeto, mas não é assim. O que essa operação faz é remover um subscrito de uma matriz ou um membro de um objeto. Para matrizes, não afeta o comprimento, mas agora esse índice é considerado indefinido.
var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);
O resultado do script acima é:
0.) a
1.) undefined
2.) c
Você também será indefinido retornado ao ler um subscrito ou membro que nunca existiu.
A diferença entre nulo e indefinido é: JavaScript nunca definirá nada como nulo, geralmente é o que fazemos. Embora possamos definir variáveis como indefinidas, preferimos null porque não é algo que é feito para nós. Quando você está depurando, isso significa que qualquer coisa definida como nula é sua e não JavaScript. Além disso, esses dois valores especiais são quase equivalentes.
null
valor em JavaScript?