Valores null e 정의되지 않음 자바스크립트 없음
10445 단어 undefinedjavascripttypescriptnull
Primeiro, vamos ver os erros que podem ser causados.
Acessando um valor não definido no JavaScript
let bubble = gum;
O código acima irá retornar 또는 erro
Uncaught ReferenceError: gum is not defined
(gum
não foi definida) pois estamos tentando criar a variável bubble
com o valor da variável gum
, que nunca tinha sido criada antes.TypeScript 없음
let bubble = gum;
TSError: ⨯ Unable to compile TypeScript:
index.ts:1:14 - error TS2304: Cannot find name 'gum'.
1 let bubble = gum;
~~~
No TypeScript recebemos uma mensagem de erro igualmente útil que nos mostra exatamente onde estamos errados e o que fazer para arrumar o erro.
Acessando um valor nulo no JavaScript
let empresa = {
nome: "Enviadores de Cotonetes",
dono: null
}
console.log(empresa.dono.nome);
Rodando o código acima teremos outro tipo de erro retornado;
Uncaught TypeError: can't access property "algo", empresa.algo is undefined
. Pode ter sido imaginado que nós iríamos ter o mesmo erro, pois estávamos criando outro erro de reference como nos exemplos anteriores mas nós antes recebemos um erro no tipo da variável que estamos tentando acessar. "empresa.dono
não pode ter nada pois é nula"vem antes de "empresa.dono.nome
존재하지 않음".Arrumando 오류
Agora que sabemos exatamente que erro nosso código anterior estava causando, é só uma questão de fazer testes o suficiente para que ele não ocorra, certo?
let empresa = {
nome: "Enviadores de Cotonetes",
dono: null
}
if (empresa != null
&& empresa.dono != null
&& empresa.dono.nome != null) {
console.log(empresa.dono.nome)
} else {
console.warn("Empresa, dono ou nome do dono da empresa não existe.")
}
의존하다 무이토. Embora o código acima rode sem retornar erros, ele já está muito verboso antes mesmo de termos uma checagem robusta (não é possível saber se apenas o dono é
null
ou apenas o nome do dono é null
). E criar todos os testes iria criar algo mais verboso ainda.let empresa = {
nome: "Enviadores de Cotonetes",
dono: null
}
if (empresa === null) {
console.warn("Empresa não existe.")
} else if (empresa.dono === null) {
console.warn("Dono da empresa não existe.")
} else {
console.log(empresa.dono.nome) // -> irá retornar `undefined`
}
Embora horrendo, o código acima está checando tudo o que nós precisamos que ele cheque. Por sorte geralmente não escrevemos testes assim e a nossa linguagem nos dá uma forma mais elegante de lidar com isso.
선택적 연결
let empresa = {
nome: "Enviadores de Cotonetes",
dono: null
}
console.log(empresa?.dono?.nome) // -> irá retornar `undefined`
체르토. O que está acontecendo no código acima? É bem simples. Imagine que toda vez que você está acessando algo dentro de um objeto (usando o
.
como em empresa.dono
), você está fazendo isso acreditando que o valor anterior não é nullish
( null
또는 undefined
). Vemos isso no código que eu chamei de horrendo. Eu so usei empresa.dono
após 음 if
que checava que empresa
não 시대 nullish
. É como se eu estives deixando a opção aberta de que esse valor pode vir a ser nullish
. E é isso que que optional chaining ( ?.
) faz. Pense nele como uma pergunta. "O valor da esquerda é nullish
? Não? Então prossiga". Isso faz com que nós nós não recebamos nenhum tipo de erro, nem de tipo nem de reference, pois já estamos adicionando a possibilidade do valor ser nulo na mesma linha que chamamos a variável.Eos 고환?
Os testes dos objetos pai não são mais necessários e nós podemos seguir em frente com a logica de negócios.
let empresa = {
nome: "Enviadores de Cotonetes",
dono: null
}
if (empresa?.dono?.nome != null) {
console.log(`O nome do dono da empresa é ${empresa.dono.nome}.`)
} else {
console.warn("Nome do dono da empresa não existe.")
}
Reference
이 문제에 관하여(Valores null e 정의되지 않음 자바스크립트 없음), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alexandradealbuquerque/valores-null-e-undefined-no-javascript-11l8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)