Por que um objeto zero e qual é a diferença entre zero e indefinido?

Por que null é considerado um object em javascript?

Cheques

 if ( object == null ) Do something 

o mesmo que

 if ( !object ) Do something 

?

Também:

Qual é a diferença entre null e undefined ?

792
29 апр. definir rahul 29 de abril 2009-04-29 08:47 '09 às 8:47 2009-04-29 08:47
@ 20 respostas
 (name is undefined) 

Você: Qual é o name ? (*)
JavaScript: name O que é um name ? Eu não sei do que você está falando. Você nunca mencionou nenhum name antes. Você vê alguma outra linguagem de script no lado (cliente)?

 name = null; 

Você: Qual é o name ?
JavaScript: eu não sei.

Em resumo; undefined não há conceito do conceito de coisa; ele não tem nenhum tipo e nunca foi mencionado anteriormente neste campo; null é onde uma coisa é conhecida, mas não se sabe qual é esse valor.

Deve ser lembrado que null não null conceitualmente o mesmo que false ou "" , ou mesmo se eles são equacionados após os tipos de casting, ou seja,

 name = false; 

Você: Qual é o name ?
JavaScript: Boolean falso.

 name = ''; 

Você: Qual é o name ?
JavaScript: string vazia


*: name neste contexto significa uma variável que nunca foi definida. Isso pode ser qualquer variável indefinida. No entanto, o nome é uma propriedade de praticamente qualquer elemento de formulário HTML. Ele volta e foi criado muito antes do id. Isso é útil porque os identificadores devem ser exclusivos, mas os nomes não devem ser.

1411
29 апр. a resposta é dada por Rob em 29 de abril 2009-04-29 16:31 '09 às 16:31 2009-04-29 16:31

A diferença pode ser resumida neste trecho:

 alert(typeof(null)); // object alert(typeof(undefined)); // undefined alert(null !== undefined) //true alert(null == undefined) //true 

Cheque

object == null é diferente de if ( !object ) .

border=0

O último é igual ! Boolean(object) ! Boolean(object) , como operador unário ! converte automaticamente o operando direito em um lógico.

Já que Boolean(null) é falso, então !false === true .

Portanto, se o seu objeto não for nulo , mas falso ou 0 ou "" , a verificação ocorrerá porque:

 alert(Boolean(null)) //false alert(Boolean(0)) //false alert(Boolean("")) //false 
134
29 апр. resposta dada por kentaromiura em 29 de abril 2009-04-29 09:44 '09 at 9:44 2009-04-29 09:44

null não null um objeto , é um valor primitivo. Por exemplo, você não pode adicionar propriedades a ele. Às vezes, as pessoas supõem erroneamente que isso é um objeto, porque o typeof null retorna "object" . Mas isso é realmente um bug (que pode ser corrigido no ECMAScript 6).

A diferença entre null e undefined é a seguinte:

  • undefined : JavaScript é usado e significa "sem valor". Variáveis ​​não inicializadas, parâmetros ausentes e variáveis ​​desconhecidas têm esse valor.

     > var noValueYet; > console.log(noValueYet); undefined > function foo(x) { console.log(x) } > foo() undefined > var obj = {}; > console.log(obj.unknownProperty) undefined 

    No entanto, o acesso a variáveis ​​desconhecidas cria uma exceção:

     > unknownVariable ReferenceError: unknownVariable is not defined 
  • null : usado por programadores para especificar "sem valor", por exemplo. como parâmetro para função.

Explorando uma variável:

 console.log(typeof unknownVariable === "undefined"); // true var foo; console.log(typeof foo === "undefined"); // true console.log(foo === undefined); // true var bar = null; console.log(bar === null); // true 

Como regra, você deve sempre usar === e nunca == em JavaScript (== executa todos os tipos de conversões que podem levar a resultados inesperados). A verificação x == null é um registrador porque funciona tanto para null quanto para undefined :

 > null == null true > undefined == null true 

A maneira usual de verificar se uma variável tem um valor é convertê-la em booleana e ver se é true . Esta conversão é realizada por um operador if e por um operador booleano! ("Não").

 function foo(param) { if (param) { // ... } } function foo(param) { if (! param) param = "abc"; } function foo(param) { // || returns first operand that can't be converted to false param = param || "abc"; } 

A desvantagem dessa abordagem é que todos os valores a seguir são avaliados como false , portanto, você deve ser cuidadoso (por exemplo, as verificações acima não podem distinguir entre undefined e 0 ).

  • undefined , null
  • Booleano: false
  • Figuras: +0 , -0 , NaN
  • Strings: ""

Você pode testar a conversão para booleano usando o Boolean como uma função (geralmente este é o construtor que será usado com o new ):

 > Boolean(null) false > Boolean("") false > Boolean(3-3) false > Boolean({}) true > Boolean([]) true 
106
01 нояб. Resposta dada por Axel Rauschmayer 01 de novembro. 2011-11-01 18:06 '11 às 18:06 2011-11-01 18:06

Qual é a diferença entre zero e indefinido?

Propriedade quando está indefinida, indefinida. null é um objeto. Seu tipo é um objeto. null é um valor especial que significa "sem valor". indefinido não é um objeto, é do tipo indefinido.

Você pode declarar uma variável, defini-la como null e o comportamento é idêntico, exceto que você vê "null" impresso em comparação com "undefined". Você pode até comparar uma variável que indefinida é zero ou vice-versa, e a condição será verdadeira:

  undefined == null null == undefined 

Para mais informações, veja a diferença entre javascript entre zero e indefinido .

e com sua nova edição sim

 if (object == null) does mean the same if(!object) 

ao testar, se o objeto é falso, ambos satisfazem somente a condição ao testar, se falso , mas não quando verdadeiro

Marque aqui: pegadinha de JavaScript

23
29 апр. Responder TStamper 29 de abr 2009-04-29 08:52 '09 at 8:52 am 2009-04-29 08:52

A primeira parte da questão:

Por que nulo é considerado um objeto em javascript?

Este é um erro de design de JavaScript que eles não podem corrigir. Era para ser do tipo nulo, e não o tipo do objeto, ou não. Isso requer verificação adicional (às vezes esquecida) quando objetos reais são detectados e é a fonte de erros.

A segunda parte da questão:

É o cheque


if (object == null)
Do something

assim como

if (!object)
Do something

Duas verificações são sempre falsas, exceto para:

  • objeto indefinido ou nulo: ambos verdadeiros.

  • o objeto é primitivo e 0, "" ou falso: primeiro defina o sinalizador como falso, o segundo é verdadeiro.

Se o objeto não for primitivo, mas um objeto real, por exemplo, new Number(0) , new String("") ou new Boolean(false) , as duas verificações serão falsas.

Então, se o “objeto” é interpretado como um objeto real, então ambas as verificações são sempre as mesmas. Se as primitivas estiverem ativadas, as verificações serão diferentes para 0, "" e falso.

Em casos como object==null , resultados não óbvios podem ser uma fonte de erro. Use == não recomendado, use === .

Terceira parte da questão:

Também:

Qual é a diferença entre zero e indefinido?

Em JavaScript, uma diferença é que null tem um objeto do tipo e undefined é do tipo undefined.

Em JavaScript, null==undefined é verdadeiro e é considerado igual se o tipo for ignorado. Por que eles decidiram, mas 0, "" e falso não são iguais, eu não sei. Isso parece uma opinião arbitrária.

Em JavaScript, null===undefined não null===undefined verdadeiro, já que o tipo deve ser o mesmo em === .

De fato, null e undefined são idênticos, pois ambos são inexistentes. Portanto, faça 0 e "" para isso e, possivelmente, esvazie os contêineres [] e {} . Tantos tipos do mesmo não são uma receita para erros. Um tipo ou nada. Vou tentar usar o mínimo possível.

'falso', 'verdadeiro' e '!' Este é outro pacote de worms que pode ser simplificado, por exemplo, if(!x) e if(x) suficiente, você não precisa de verdadeiro e falso.

Um tipo de var x declarado é indefinido se o valor não for especificado, mas deve ser o mesmo que se x nunca tivesse sido declarado. Outra fonte de erro é um contêiner vazio. Portanto, é melhor declarar e definir juntos, por exemplo var x=1 .

Pessoas circulando em círculos, tentando entender todos esses diferentes tipos de nada, mas tudo isso é o mesmo em roupas diferentes e complexas. Realidade

 undefined===undeclared===null===0===""===[]==={}===nothing 

E talvez todos devam lançar exceções.

19
15 июля '11 в 1:15 2011-07-15 01:15 a resposta é dada por Anon no dia 15 de julho de 2011 às 1:15 2011-07-15 01:15
 var x = null; 

x é definido como nulo

y não está definido // porque eu não o defini

 if (!x) 

null avaliado como falso

9
29 апр. Responder Chad Grant abr 29 2009-04-29 08:56 '09 às 8:56 2009-04-29 08:56

Comparação de muitas verificações zero diferentes em javascript:

http://jsfiddle.net/aaronhoffman/DdRHB/5/

 // Variables to test var myNull = null; var myObject = {}; var myStringEmpty = ""; var myStringWhiteSpace = " "; var myStringHello = "hello"; var myIntZero = 0; var myIntOne = 1; var myBoolTrue = true; var myBoolFalse = false; var myUndefined; ...trim... 

http://aaron-hoffman.blogspot.com/2013/04/javascript-null-checking-undefined-and.html

2019

7
29 апр. a resposta é dada por Aaron Hoffman em 29 de abril 2013-04-29 18:23 '13 às 18:23 2013-04-29 18:23

Uma maneira de entender o valor de nulo e indefinido é entender onde eles ocorrem.

Espere um valor de retorno nulo nas seguintes situações:

  • Métodos de consulta DOM

     console.log(window.document.getElementById("nonExistentElement")); //Prints: null 
  • Respostas JSON Recebidas da Solicitação Ajax

 { name: "Bob", address: null } 
  • RegEx.exec .

  • Nova funcionalidade que está em estado de mudança. Os seguintes retornos são nulos:

 var proto = Object.getPrototypeOf(Object.getPrototypeOf({})); // But this returns undefined: Object.getOwnPropertyDescriptor({}, "a"); 

Todos os outros casos de não-existência são indicados pelo símbolo indefinido (como observado por @Axel). Cada uma das seguintes impressões digitais é "indefinida":

  var uninitalised; console.log(uninitalised); var obj = {}; console.log(obj.nonExistent); function missingParam(missing){ console.log(missing); } missingParam(); var arr = []; console.log(arr.pop()); 

Claro, se você decidir escrever var unitializado = nulo; ou retornar null do método você mesmo, então você tem zero em outras situações. Mas deveria ser bem óbvio.

O terceiro caso é quando você deseja acessar a variável, mas nem sabe se ela foi declarada. Para este caso, use TypeOf para evitar erros de referência:

 if(typeof unknown !== "undefined"){ //use unknown } 

Verifique brevemente o valor de null quando estiver gerenciando o DOM ao lidar com o Ajax ou usando algumas funções do ECMAScript 5. Para todos os outros casos, é seguro verificar a igualdade estrita em undefined:

 if(value === undefined){ // stuff } 
7
07 мая '12 в 13:06 2012-05-07 13:06 a resposta é dada por Noel Abrahams em 07 de maio de 2012 às 13:06 2012-05-07 13:06

null e undefined são false para igualdade de valores (null == undefined): ambos são minimizados para boolean false. Eles não são o mesmo objeto (null! == undefined).

undefined é uma propriedade de um objeto global (uma “janela” em navegadores), mas é um tipo primitivo, e não o próprio objeto. Este é o valor padrão para variáveis ​​não inicializadas e funções que terminam sem uma declaração de retorno.

null é uma instância de objeto. null é usado para métodos DOM que retornam objetos de coleção para indicar um resultado vazio que fornece um valor falso sem erro.

6
29 апр. a resposta é dada por Anonymous 29 apr. 2009-04-29 08:58 '09 at 8:58 am 2009-04-29 08:58

null é um objeto. Seu tipo é NULL. undefined não undefined um objeto; seu tipo é indefinido.

4
29 апр. A resposta é dada por Vikas em 29 de abril. 2009-04-29 08:51 '09 at 8:51 am 2009-04-29 08:51

Algumas notas:

null e undefined são dois valores diferentes. Um deles representa a ausência de significado para o nome e o outro representa a ausência do nome.


O que acontece if for if( o ) , como mostrado abaixo:

A expressão entre parênteses o é avaliada e, em seguida, if chuta no tipo o valor forçado da expressão entre parênteses - no nosso caso o .

Falsificações (que serão convertidas em valores falsos) em JavaScript: '', null, undefined, 0 e false.

4
30 апр. Resposta dada por Laurent Villeneuve em 30 Abr 2009-04-30 10:55 '09 às 10:55 2009-04-30 10:55

Para adicionar à resposta "Qual é a diferença entre undefined e null , do guia de definição de javascript nesta página :

Você pode pensar que undefined representa um nível de sistema, ou uma ausência errônea de um valor e null para representar um nível de programa, normal ou uma falta de valor esperada. Se você precisar atribuir um desses valores a uma variável ou propriedade, ou passar um desses valores para uma função, o valor null quase sempre a escolha certa.

4
07 окт. A resposta é dada 太極 者 無極 而 生 07 out. 2012-10-07 17:47 '12 às 17:47 2012-10-07 17:47

A seguinte função mostra porque é capaz de calcular a diferença:

 function test() { var myObj = {}; console.log(myObj.myProperty); myObj.myProperty = null; console.log(myObj.myProperty); } 

Se você ligar

 test(); 

Você começa

indefinido

zero

O primeiro console.log(...) tenta obter myProperty de myObj enquanto ainda não está definido, então retorna "undefined". Depois de atribuir um valor nulo, o segundo console.log(...) explicitamente retorna "null" porque myProperty existe, mas é atribuído o valor null .

Para poder consultar essa diferença, o JavaScript tem null e undefined : Enquanto null - como em outros idiomas, um objeto undefined não pode ser um objeto, porque não há instância (nem mesmo uma instância null ).

1
08 мая '14 в 16:00 2014-05-08 16:00 a resposta é dada por user3615347 8 de maio de '14 às 4:00 pm 2014-05-08 16:00

Outra coisa divertida sobre o nulo, comparado ao indefinido, é que ele pode ser aumentado.

1
10 февр. Resposta dada por Tim Scollick 10 de fevereiro 2016-02-10 18:45 '16 às 18:45 2016-02-10 18:45

Por exemplo, window.someWeirdProperty é indefinido, então

"window.someWeirdProperty === null" é avaliado como falso e

"window.someWeirdProperty === undefined" é verdadeiro.

Além disso, verifique if (!o) não corresponde à verificação if (o == null) de o false .

1
29 апр. Resposta dada por Piotr Findeisen em 29 de abril 2009-04-29 08:55 '09 at 8:55 am 2009-04-29 08:55

Dos princípios do Javascript orientado a objetos por Nicholas K. Zakas

Mas por que um objeto quando o tipo é nulo? (Na verdade, isso foi reconhecido como um erro pelo TC39, um comitê que desenvolve e suporta JavaScript. Você pode argumentar que null é um ponteiro nulo para um objeto, o que torna o "objeto" um valor de retorno lógico, mas ainda é confuso.)

Zakas, Nicholas K. (2014-02-07). Princípios do JavaScript orientado a objetos (locais do Kindle 226-227). Sem amido. Edição do Kindle.

Dizia:

 var game = null; //typeof(game) is "object" game.score = 100;//null is not an object, what the heck!? game instanceof Object; //false, so it not an instance but it type is object //let make this primitive variable an object; game = {}; typeof(game);//it is an object game instanceof Object; //true, yay!!! game.score = 100; 

Caso indefinido:

 var score; //at this point 'score' is undefined typeof(score); //'undefined' var score.player = "felix"; //'undefined' is not an object score instanceof Object; //false, oh I already knew that. 
0
28 авг. a resposta é dada Felix G 28 ago. 2014-08-28 22:49 '14 às 22:49 2014-08-28 22:49

Em Javascript, null não null um tipo de object , é um tipo primitave .

Qual a diferença? Indefinido refere-se a um ponteiro que não foi definido. Nulo refere-se a um ponteiro nulo, por exemplo, algo manualmente define uma variável null

0
28 авг. a resposta é dada por AnonDCX 28 ago. 2016-08-28 07:40 '16 às 7:40 2016-08-28 07:40
  • Indefinido significa que a variável foi declarada, mas nenhum valor foi atribuído a ela, e Null pode ser atribuído a uma variável que representa o valor "sem valor" (Operador de atribuição nula)

2. Definido é o próprio tipo e Nulo é um objeto.

3. O próprio Javascript pode inicializar qualquer variável não reconhecida como indefinida, mas nunca pode definir a variável como nula. Isso deve ser feito de forma programática.

0
11 марта '16 в 15:27 2016-03-11 15:27 a resposta é dada a the_unknown_spirit 11 de março de '16 at 15:27 2016-03-11 15:27

A melhor maneira de pensar em "zero" é lembrar como um conceito semelhante é usado em bancos de dados, onde indica que o campo não contém "nenhum valor".

  • Sim, o valor do elemento é conhecido; ele é "determinado". Foi inicializado.
  • Valor do elemento: "sem valor".

Este é um método muito útil para escrever programas que são mais facilmente depurados. A variável 'indefinida' pode ser o resultado de um erro ... (como você sabe?) ... mas se a variável contiver o valor "null", você sabe que "alguém, em algum lugar deste programa, está definido como" null " Portanto, sugiro que quando você precisar se livrar do valor de uma variável, não "delete" ... configure para "null" O valor antigo permanecerá órfão e o lixo será coletado em breve, o novo valor: "no value (now)". Em ambos os casos, o estado variável é indubitável: "isso, obviamente, deliberadamente, foi assim".

0
06 янв. Resposta é dada por Mike Robinson Jan 06 2016-01-06 22:47 '16 às 22:47 2016-01-06 22:47

Veja isto:

  <script> function f(a){ alert(typeof(a)); if (a==null) alert('null'); a?alert(true):alert(false); } </script> //return: <button onclick="f()">nothing</button> //undefined null false <button onclick="f(null)">null</button> //object null false <button onclick="f('')">empty</button> //string false <button onclick="f(0)">zero</button> //number false <button onclick="f(1)">int</button> //number true <button onclick="f('x')">str</button> //string true 
0
15 июля '17 в 14:43 2017-07-15 14:43 a resposta é dada ZPKSoft 15 de julho '17 às 14:43 2017-07-15 14:43

Outras questões sobre o tags or Faça uma pergunta