Como verifico uma variável se é
null
ouundefined
e qual é a diferença entre thenull
eundefined
?Qual é a diferença entre
==
e===
(é difícil pesquisar no Google por "===")?
Como verifico uma variável se é null
ou undefined
e qual é a diferença entre the null
e undefined
?
Qual é a diferença entre ==
e ===
(é difícil pesquisar no Google por "===")?
Respostas:
Como verifico uma variável se é
null
ouundefined
...
É a variável null
:
if (a === null)
// or
if (a == null) // but see note below
... mas observe que o último também será verdadeiro se a
for undefined
.
É undefined
:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
... mas, novamente, observe que o último é vago; também será verdade se a
for null
.
Agora, apesar do acima exposto, a maneira usual de verificar esses itens é usar o fato de serem falsos :
if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
Isso é definido pelo ToBoolean na especificação.
... e qual é a diferença entre the
null
eundefined
?
Ambos são valores geralmente usados para indicar a ausência de algo. undefined
é o mais genérico, usado como o valor padrão das variáveis até que elas recebam algum outro valor, como o valor dos argumentos da função que não foram fornecidos quando a função foi chamada e como o valor que você obtém ao perguntar a um objeto para uma propriedade que não possui. Mas também pode ser usado explicitamente em todas essas situações. (Há uma diferença entre um objeto não ter uma propriedade e ter a propriedade com o valor undefined
; há uma diferença entre chamar uma função com o valor undefined
para um argumento e deixar esse argumento totalmente desativado.)
null
é um pouco mais específico que undefined
: é uma referência de objeto em branco. É claro que o JavaScript é tipicamente digitado, mas nem todas as coisas com as quais ele interage são digitadas. Se uma API como o DOM nos navegadores precisar de uma referência de objeto em branco, usaremos isso null
, não undefined
. E da mesma forma, a getElementById
operação do DOM retorna uma referência de objeto - válida (se encontrou o elemento DOM) ou null
(se não encontrou).
Curiosamente (ou não), eles são seus próprios tipos. Ou seja, null
é o único valor no tipo Nulo e undefined
é o único valor no tipo Indefinido.
Qual é a diferença entre "==" e "==="
A única diferença entre eles é que ==
fará coerção de tipo para tentar obter os valores correspondentes e ===
não corresponderá. Então, por exemplo, "1" == 1
é verdade, porque "1"
obriga a 1
. Mas "1" === 1
é falso , porque os tipos não correspondem. ( "1" !== 1
é verdadeiro.) O primeiro passo (real) de ===
é "Os tipos dos operandos são os mesmos?" e se a resposta for "não", o resultado será false
. Se os tipos são os mesmos, ele faz exatamente o que ==
faz.
A coerção de tipos usa regras bastante complexas e pode ter resultados surpreendentes (por exemplo, "" == 0
é verdade).
Mais nas especificações:
==
também chamada de igualdade "solta")===
)if (a) { ... }
significaria "se a
for verdade", em que "verdade" é um valor diferente de zero, não nulo, indefinido, não falso, falso e não vazio. :-)
null
não é um objeto , é uma referência a um objeto que significa "nenhum objeto". Isso é importante, porque é o que é usado com interfaces fornecidas pelo host quando elas fornecem referências a objetos, mas não têm uma para fornecer (por exemplo, node.nextSibling
quando node
é o último elemento em seu pai ou getElementById
quando não há elemento com esse ID). A tecnologia que o host usa para isso pode não ser tão flexível quanto o JavaScript é sobre tipos de variáveis / propriedades; portanto, era necessário ter uma null
obj ref (ao contrário de undefined
).
typeof null
retornar "objeto" faz sentido. O único outro valor que faria sentido seria "nulo", pois definitivamente deveria retornar algo diferente de typeof undefined
. null representa uma referência de objeto nulo, o que, no mínimo, significa que a variável que o contém destina-se a algum tipo de 'objeto'. Se foi um erro, foi um bom erro. De qualquer forma, em relação à resposta, é bom saber a dica sobre undefined
! == undefined
durante scripts entre janelas, especialmente para fins de depuração.
A diferença é sutil.
No JavaScript, uma undefined
variável é uma variável que nunca foi declarada ou nunca atribuiu um valor. Digamos que você declara, var a;
por exemplo, então a
será undefined
, porque nunca foi atribuído nenhum valor.
Mas se você atribuir, a = null;
então a
será null
. Em JavaScript, null
é um objeto (tente typeof null
em um console JavaScript, se você não acredita em mim), o que significa que nulo é um valor (na verdade, mesmo undefined
é um valor).
Exemplo:
var a;
typeof a; # => "undefined"
a = null;
typeof null; # => "object"
Isso pode ser útil em argumentos de função. Você pode querer ter um valor padrão, mas considere nulo aceitável. Nesse caso, você pode fazer:
function doSomething(first, second, optional) {
if (typeof optional === "undefined") {
optional = "three";
}
// do something
}
Se você omitir o optional
parâmetro doSomething(1, 2) then
opcional será a "three"
string, mas se você passar doSomething(1, 2, null)
, será opcional null
.
Quanto aos comparadores iguais ==
e estritamente iguais ===
, o primeiro é do tipo fraco, enquanto o estritamente igual também verifica o tipo de valores. Isso significa que 0 == "0"
retornará verdadeiro; while 0 === "0"
retornará false, porque um número não é uma string.
Você pode usar esses operadores para verificar entre undefined
um null
. Por exemplo:
null === null # => true
undefined === undefined # => true
undefined === null # => false
undefined == null # => true
O último caso é interessante, porque permite verificar se uma variável é indefinida ou nula e mais nada:
function test(val) {
return val == null;
}
test(null); # => true
test(undefined); # => true
A especificação é o lugar para obter respostas completas para essas perguntas. Aqui está um resumo:
x
, você pode:null
por comparação direta usando ===
. Exemplo:x === null
undefined
um dos dois métodos básicos: comparação direta com undefined
ou typeof
. Por várias razões , eu prefiro typeof x === "undefined"
.null
e undefined
use ==
e confie nas regras de coerção do tipo ligeiramente arcano que significa que x == null
faz exatamente o que você deseja.==
e ===
é que, se os operandos são de tipos diferentes, ===
sempre retornam false
enquanto ==
convertem um ou ambos os operandos no mesmo tipo usando regras que levam a algum comportamento pouco intuitivo. Se os operandos forem do mesmo tipo (por exemplo, ambos são strings, como na typeof
comparação acima), ==
e ===
se comportarão exatamente da mesma maneira.Mais leitura:
Como verifico uma variável se ela é nula ou indefinida
basta verificar se uma variável tem um valor válido como este:
if(variable)
retornará true se a variável não contiver:
Indefinido
Isso significa que a variável ainda não foi inicializada.
Exemplo:
var x;
if(x){ //you can check like this
//code.
}
é igual a (==)
Ele apenas verifica se o valor é igual a não o tipo de dados.
Exemplo:
var x = true;
var y = new Boolean(true);
x == y ; //returns true
Porque verifica apenas o valor.
Iguais estritos (===)
Verifica se o valor e o tipo de dados devem ser iguais.
Exemplo:
var x = true;
var y = new Boolean(true);
x===y; //returns false.
Porque verifica o tipo de dados x é um tipo primitivo e y é um objeto booleano.
O anúncio 1. null
não é um identificador para uma propriedade do objeto global, como undefined
pode ser
Anúncio 2. Os ===
valores e tipos de verificação. Eles ==
não exigem os mesmos tipos e fizeram uma conversão implícita antes da comparação (usando .valueOf()
e .toString()
). Aqui você tem todos ( src ):
E se
== (sua negação ! = )
=== (sua negação ! == )
document.all == null
edocument.all !== null
Se sua verificação (lógica) é negativa (!) E você deseja capturar JS null
e undefined
(como diferentes navegadores fornecerão resultados diferentes), você usaria a comparação menos restritiva: por exemplo:
var ItemID = Item.get_id();
if (ItemID != null)
{
//do stuff
}
Isso irá capturar ambos null
eundefined
Tente com lógica diferente . Você pode usar o código abaixo para verificar todas as quatro (4) condições para validação, como não nulo, não em branco, não indefinido e não zero, use apenas este código (! (! (Variável))) em javascript e jquery.
function myFunction() {
var data; //The Values can be like as null, blank, undefined, zero you can test
if(!(!(data)))
{
//If data has valid value
alert("data "+data);
}
else
{
//If data has null, blank, undefined, zero etc.
alert("data is "+data);
}
}
==
e===
é bem descrita aqui .