As palavras anteriores
Em linguagens gerais de programação, apenas nulo significa vazio, mas o designer de JavaScript Brendan Eich projetou um indefinido, o que, sem dúvida, aumenta a complexidade do programa, mas há uma certa razão para fazê -lo. Este artigo introduzirá indefinido e nulo em JavaScript em detalhes
Razões históricas
Quando o JavaScript nasceu em 1995, foi inicialmente definido como Java, apenas Null foi definido como um valor indicando "nenhum". De acordo com a tradição da linguagem C, Null foi projetado para se transformar automaticamente para 0
No entanto, o designer de JavaScript Brendan Eich acha que isso não é suficiente, por duas razões. Primeiro, Null é tratado como um objeto como em Java. No entanto, os valores de JavaScript são divididos em duas categorias: tipos primitivos e tipos de objetos. Brendan Eich acha que o valor que significa "nenhum" é melhor não um objeto. Em segundo lugar, a versão inicial do JavaScript não incluiu um mecanismo de manuseio de erros. Quando a incompatibilidade do tipo de dados ocorre, geralmente converte automaticamente o tipo ou falha silenciosamente. Brendan Eich acha que, se NULL se transformar automaticamente para 0, é difícil encontrar erros
Portanto, Brendan Eich projetou outro indefinido. Ele distingue assim: nulo é um objeto que representa "nenhum", que é 0 quando convertido em um valor numérico; indefinido é um valor original que representa "nenhum", que é nan quando convertido em um valor numérico
No entanto, atualmente nulos e indefinidos são basicamente sinônimos, ambos são tipos primitivos e existem apenas algumas pequenas diferenças.
indefinido
O tipo indefinido tem apenas um valor, que é indefinido. Quando a variável declarada não é inicializada, o valor padrão da variável é indefinido. Então, geralmente, indefinido significa que a variável não é inicializada
var test; // undefinedconsole.log (test == indefinido); // TRUEVAR TEST = Undefined; // Undefinido
Para variáveis que não foram declaradas, apenas uma operação pode ser realizada, usando o operador TIPEOF para detectar seus tipos de dados, mas causará um erro no modo rigoroso
typeof (teste); // indefinido
【Aparência da cena】
【1】 Variáveis não salientes declaradas
【2】 Obtenha os atributos que não existem no objeto
【3】 Execução resultado da função sem valor de retorno
【4】 Os parâmetros de função não são passados em
【5】 vazio (expressão)
var i; console.log (i); // undefinedvar o = {}; console.log (op); // undefinedFunction f () {}; console.log (f ()); // undefinedfunction f (x) {return x; console.log (f ()) //} console;【Conversão do tipo】
Booleano (indefinido): Falsenumber (indefinido): Nanstring (indefinido): 'indefinido'
nulo
Existe apenas um valor para o tipo nulo, que é nulo. Null é uma palavra -chave no idioma JavaScript. Representa um valor especial e é frequentemente usado para descrever "valor nulo".
Logicamente, o valor nulo representa um ponteiro de objeto vazio
[Nota] Null é um ponteiro de objeto vazio, enquanto [] é uma matriz vazia, {} é um objeto vazio, os três são diferentes
console.log (tipo de nulo); // 'objeto'
Embora nulos e indefinidos sejam diferentes, ambos representam "Valor vazio", Null representa "valor nulo" e indefinido representa "indefinido". Os dois são frequentemente intercambiáveis. Juiz Operador de Igualdade == Pense que os dois são iguais
console.log (null == indefinido); // true
De fato, como indefinidos e nulos não são tipos de construtor, eles não têm propriedades e métodos. Usando . e [] acessar membros ou métodos de ambos os valores produzirá um erro de tipo.
【Conversão do tipo】
Booleano (NULL): Falsenumber (NULL): 0String (NULL): 'NULL'
Abaixo, apresentarei a diferença entre nulo e indefinido em JavaScript
Indefinido representa o valor quando a variável é declarada, mas não é inicializada, e o NULL representa o valor que está pronto para ser usado para salvar o objeto, mas não salvou realmente o objeto. Do ponto de vista lógico, o valor nulo representa um ponteiro de objeto vazio.
Existem 5 tipos básicos em JavaScript (ECMAScript Standard): indefinido, nulo, booleano, número, string e um objeto de tipo complexo. Pode -se observar que nulo e indefinido pertencem a diferentes tipos. O valor não iniciado é detectado pelo tipo de "indefinido" (string), enquanto o valor nulo é detectado pelo tipo de "objeto" (string).
Não é recomendável definir explicitamente uma variável como indefinida a qualquer momento, mas se a variável que salva o objeto não tiver realmente salvo o objeto, ele deve ser definido como nulo.
De fato, o valor indefinido é derivado de um valor nulo. O padrão ECMAScript estipula que o teste de igualdade dos dois deve ser devolvido verdadeiro, isto é,
alerta (nulo == indefinido); // verdadeiro