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 assimdatauma variável indefinida e gerando um errodata != null.A função foi chamada especificamente com
null(ouundefined), como argumento, caso em quedata != nulljá protege o código interno, tornando-o&& data !== undefinedinútil.A função foi chamada com um argumento não nulo; nesse caso, passará trivialmente ambos
data != nulledata !== 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 falseou 0como valores data.
if(typeof someUndefVar == whatever) -- workse if(someUnderVar) -- error.
data !== null && data !== undefined, o que é equivalente ao data != nullque é 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 nulle undefinedestá sendo verificada com as duas condições posteriores.
undefinedIMO 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 adatavariável é avaliada como verdadeira.undefined,null, Falso, 0, cadeia vazia, matriz vazia e objecto (?) Sem propriedades avaliada como falsa, o resto é verdadeiro.