2.1 Variáveis são referências
Em JavaScript, as variáveis são referências para objetos, e não a própria variável. Isso significa que, quando você cria uma variável em JavaScript, você está apenas criando uma referência para o objeto na memória.
Essa característica da linguagem tem importantes implicações ao trabalhar com variáveis, especialmente quando se passa objetos para funções ou se atribui a outras variáveis.
Quando você cria uma variável e atribui um valor a ela, o JavaScript aloca um objeto na memória para esse valor e torna a variável uma referência para esse objeto. Se você atribuir uma variável a outra, a nova variável irá referenciar o mesmo objeto que a variável original. Isso significa que as alterações feitas através de uma variável refletirão na outra, se o objeto for mutável.
Exemplo:
let a = [1, 2, 3];
let b = a;
b.push(4);
console.log(a); // Exibe: [1, 2, 3, 4]
Nós adicionamos o número 4 na variável b
, mas ele também foi adicionado à lista da variável a
, pois na verdade ambas as variáveis
são apenas referências ao objeto lista [1, 2, 3]
2.2 Tipo undefined
Em JavaScript, existem dois tipos de dados especiais: null
e undefined
. Esses tipos frequentemente geram dúvidas entre os desenvolvedores
devido à sua semelhança, mas eles têm propósitos diferentes e são usados em situações distintas. Vamos analisá-los mais detalhadamente.
Tipo undefined
O tipo undefined
representa o valor de uma variável que foi declarada, mas não inicializada. Esse valor também
é retornado ao acessar uma propriedade inexistente de um objeto ou um elemento de um array que não existe.
Exemplos
1. Variável não inicializada:
let x;
console.log(x); // undefined
2. Propriedade inexistente de um objeto:
let obj = {};
console.log(obj.property); // undefined
3. Elemento inexistente de um array:
let array = [1, 2, 3];
console.log(array[5]); // undefined
4. Argumento ausente de uma função:
function myFunction(a, b) {
console.log(b); // undefined, se chamado como myFunction(1)
}
myFunction(1);
Propriedades do undefined:
undefined
é tanto um tipo de dado quanto um valortypeof undefined
retornaundefined
2.3 Tipo null
O tipo null
representa a ausência intencional de valor. Esse valor é frequentemente usado para inicializar
variáveis que serão atribuídas a um objeto posteriormente, ou para limpar o valor de uma variável.
Exemplos
1. Inicialização de variável:
let obj = null;
console.log(obj); // null
2. Limpeza de valor de variável:
let user = { name: "Alice" };
user = null; // user agora não aponta mais para o objeto
Propriedades do null:
null
é um valor que representa a ausência intencional de valortypeof null
retornaobject
, o que é um erro reconhecido na linguagem JavaScript (na verdade,null
não é um objeto)
2.4 Comparação entre null e undefined
Embora null
e undefined
possam ser usados para indicar ausência de valor,
eles diferem em finalidade e contexto de uso.
Propriedade | null | undefined |
---|---|---|
Tipo | Tipo Primitivo | Tipo Primitivo |
Finalidade | Ausência intencional de valor | Variável não inicializada |
Uso | Inicialização de variáveis, limpeza de valor | Propriedades inexistentes, elementos de array |
Valor padrão | Não | Sim (para variáveis não inicializadas, parâmetros de funções) |
Exemplos de uso
1. Inicialização de variável com objeto ou array:
let myObject = null;
let myArray = null;
2. Verificação de valores:
let value;
if (value === undefined) {
console.log("Variável não inicializada.");
}
let result = null;
if (result === null) {
console.log("Ausência de valor.");
}
3. Limpeza de valores:
let person = { name: "Alice" };
person = null; // Agora person não aponta mais para o objeto
4. Verificação de existência de propriedade:
let obj = {};
if (obj.property === undefined) {
console.log("Propriedade não existe.");
}
Entender as diferenças entre null
e undefined
em JavaScript é importante para gerenciar
valores corretamente e evitar erros no código.
undefined
geralmente indica variáveis não inicializadas ou propriedades ausentes, enquanto
null
é usado para indicar explicitamente a ausência de valor.
O uso correto desses tipos especiais de dados torna o código mais claro e previsível.
GO TO FULL VERSION