21
loading...
This website collects cookies to deliver better user experience
let bubble = gum;
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.let bubble = gum;
TSError: ⨯ Unable to compile TypeScript:
index.ts:1:14 - error TS2304: Cannot find name 'gum'.
1 let bubble = gum;
~~~
let empresa = {
nome: "Enviadores de Cotonetes",
dono: null
}
console.log(empresa.dono.nome);
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 referência 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
não existe".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.")
}
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`
}
let empresa = {
nome: "Enviadores de Cotonetes",
dono: null
}
console.log(empresa?.dono?.nome) // -> irá retornar `undefined`
.
como em empresa.dono
), você está fazendo isso acreditando que o valor anterior não é nullish
(null
ou undefined
). Vemos isso no código que eu chamei de horrendo. Eu só usei empresa.dono
após um if
que checava que empresa
não era nullish
. É como se eu estivesse 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ão recebamos nenhum tipo de erro, nem de tipo nem de referência, pois já estamos adicionando a possibilidade do valor ser nulo na mesma linha que chamamos a variável.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.")
}