Encontrei o seguinte código:
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
Sou um pouco novo em JavaScript, mas, a partir de outras perguntas que tenho lido aqui, tenho a impressão de que esse código não faz muito sentido.
Você receberá um erro se acessar uma variável indefinida em qualquer contexto que não sejatypeof
.
Atualização: a (citação da) resposta acima pode ser enganosa. Deve dizer «uma variável não declarada» , em vez de «uma variável não definida» .
Como descobri, nas respostas de Ryan ♦ , maerics e nwellnhof , mesmo quando nenhum argumento é fornecido para uma função, suas variáveis para os argumentos sempre são declaradas. Esse fato também prova errado o primeiro item da lista abaixo.
Pelo meu entendimento, os seguintes cenários podem ser observados:
A função foi chamada sem argumentos, criando assimdata
uma variável indefinida e gerando um errodata != null
.A função foi chamada especificamente com
null
(ouundefined
), como argumento, caso em quedata != null
já protege o código interno, tornando-o&& data !== undefined
inútil.A função foi chamada com um argumento não nulo; nesse caso, passará trivialmente ambos
data != null
edata !== undefined
.
P: Meu entendimento está correto?
Eu tentei o seguinte, no console do Firefox:
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
Não consigo descobrir um caso em que o data !== undefined
depois data != null
possa ser útil.
if(data)
significaria que ele não pode passar false
ou 0
como valores data
.
if(typeof someUndefVar == whatever) -- works
e if(someUnderVar) -- error
.
data !== null && data !== undefined
, o que é equivalente ao data != null
que é equivalente data != undefined
. A forma anterior tende a ser favorecida, pois é mais explícita sobre as condições, ao passo que seria fácil ignorar essas duas null
e undefined
está sendo verificada com as duas condições posteriores.
undefined
IMO são um cheiro de código. Não é uma palavra-chave protegida null
, é uma variável indefinida. Isto é completamente válida e vai quebrar seu código:undefined = 1
if (data)
. É uma maneira mnemônica de Javascript para verificar se adata
variável é avaliada como verdadeira.undefined
,null
, Falso, 0, cadeia vazia, matriz vazia e objecto (?) Sem propriedades avaliada como falsa, o resto é verdadeiro.