Em JavaScript, temos algo chamado indefinido . Eu disse alguma coisa, porque realmente não sei se é uma classe base, ou uma variável interna, ou uma palavra-chave, ou qualquer outra coisa. Eu apenas sei que está lá.
Para vê-lo em ação, você pode simplesmente escrever:
undefined;
typeof undefined;
Alguém pode me explicar por que essa coisa foi inserida no JavaScript? Temos null
valor nessa linguagem, portanto não deve ser algo parecido null
. Em outros idiomas, quando não sabemos o valor de uma propriedade ou variável, simplesmente o definimos como nulo. Aqui podemos fazer a mesma coisa.
Como podemos usar essa coisa em JavaScript?
javascript
language-design
Saeed Neamati
fonte
fonte
undefined
e quando usarnull
Respostas:
Há duas coisas que você precisa entender sobre indefinido ...
undefined
que pode ter apenas um valor .undefined
Agora leia o seguinte com muito cuidado ...
Existem muitos valores do tipo
number
(10, 10.01, 1e1). Mas só pode haver um valor do tipoundefined
, e esse valor é armazenado na variávelundefined
. Esse valor tem representação NO literal - por exemplo, valores numéricos1
,100
,1e-1
são todos literais de número do tipo, mas o valor armazenado na variávelundefined
não tem forma literal.undefined
é uma variável, apenas uma variável normal, que o JavaScript declara e atribui o valor do tipoundefined
no escopo global. Então você pode fazer o seguinte ...undefined
, poderá gerar o valor do tipoundefined
pela expressãovoid 0
- cujo único objetivo é retornar um valor do tipoundefined
.NÃO. Assim como ninguém pode explicar por que variáveis não declaradas vão para o escopo global em vez de local. Você só precisa treinar-se para usá-lo de maneira inteligente , em vez de tentar encontrar justificativas para sua existência.
Embora
null
possa fazer as coisasundefined
, é mais ou menos relacionado aobjects
escalares do que a escalares. De fato, o JavaScript se consideranull
um objeto -typeof null
retorna "objeto".Na minha opinião, a linha inferior é NÃO tentar raciocinar os propósitos absolutos de
undefined
enull
- e usá-los de maneira inteligível, para que seu código seja legível, sustentável e reutilizável.fonte
the bottom line is to NOT try to reason the absolute purposes of undefined and null
, parece que o JavaScript está longe de ser uma linguagem lógica e simplesmente precisamos nos acostumar, como experimentar um novo mundo.undefined
". Realmentevoid
avalia uma expressão, desconsidera o valor de retorno e retorna oundefined
valor. Quanto às diferenças.undefined
é usado pelo mecanismo JS para dizer que isso não tem valor.null
é usado por você para dizer que essa coisa não tem valor. Existe uma distinção clara .undefined = 100; typeof undefined;
retorna "indefinido" para mim, se você tentar atribuir a nulo, receberá um erro. Só queria esclarecer isso para futuros leitores.Desculpe por responder a uma pergunta mais antiga, mas a razão pela qual você precisa de indefinido e nulo é simples: em uma linguagem de digitação de pato baseada em protótipo, é absolutamente necessário diferenciar entre "este objeto não define um valor para X" e "este objeto diz que X é nada / nulo / vazio ".
Sem essa capacidade, não há como percorrer a cadeia de protótipos e, portanto, a herança não pode funcionar; você deve ser capaz de determinar que obj.someProp é indefinido, para que possa olhar para obj.prototype.someProp e prosseguir na cadeia até encontrar um valor. Se obj.someProp retornasse nulo, não haveria como saber se realmente era nulo ou apenas significava "olhar para o meu protótipo". A única maneira de contornar isso é injetar alguma magia esfarrapada nos bastidores, o que interrompe sua capacidade de mexer nas cadeias de protótipos e fazer vários outros pedaços de magia negra JS.
Como grande parte do Javascript, a ideia de indefinido e nulo parece instável e estúpida no começo, depois absolutamente brilhante depois (depois volta ao instável e estúpida, mas com uma explicação razoável).
Um idioma como C # não será compilado se você acessar uma propriedade que não existe e outros idiomas dinâmicos geralmente lançam exceções em tempo de execução quando você toca em uma propriedade que não existe, o que significa que você deve usar construções especiais para testá-las. Classes Plus significa que quando um objeto é instanciado, você já conhece sua cadeia de herança e todas as propriedades que ele possui - em JS, eu posso modificar um protótipo 15 passos acima da cadeia e essas alterações aparecerão nos objetos existentes.
fonte
Existe uma variável global
undefined
, definida como o valor indefinido. Pessoas más podem defini-lo para outra coisa, então provavelmente é melhor não confiar nisto.typeof undeclaredVariable == 'undefined'
. tentar ler o valor de uma variável subfinida fará com que você jogue foraReferenceError
.)null
está sutilmente quebrado, porquetypeof null == 'object'
. Não sei por que temosundefined
enull
, provavelmente, algum acidente histórico.fonte
Bem,
undefined
é um valor sentinela obtido pela avaliação de algo que não está definido em oposição anull
, que é o valor exatamente definido para representar nada .Assim, por exemplo, o valor de retorno de uma função, que não define um valor de retorno, é indefinido. O valor de uma propriedade não definida em um objeto é indefinido. O valor de retorno de uma instrução, que não é uma expressão, é indefinido (embora você não veja isso ocorrer além do console).
Por favor, note que você pode criar uma função, que explicitamente retornos
undefined
e você pode definir explicitamente uma propriedade com o valorundefined
em um objeto, porque no final é um valor válido. Você faria isso para comunicar explicitamente que algo não está definido .Você poderia pensar na relação de
undefined
enull
como entreNaN
e0
.fonte
undefined
évoid
?void
em JavaScript é um operador unário , que aceita qualquer argumento e retorna o valorundefined
.