Frage Warum ist null ein Objekt und was ist der Unterschied zwischen null und nicht definiert?


Warum ist null betrachtet als object in JavaScript?

Überprüft

if ( object == null )
      Do something

das Gleiche wie

if ( !object )
      Do something

?

Und auch:

Was ist der Unterschied zwischen null und undefined?


819
2018-04-29 05:47


Ursprung


Antworten:


(name is undefined)

Sie: Was ist name? (*)
JavaScript:  name? Was ist ein name? Ich weiß nicht, wovon du redest. Du hast noch nie etwas erwähnt name Vor. Sehen Sie eine andere Skriptsprache auf der (Client-) Seite?

name = null;

Sie: Was ist name?
JavaScript: Ich weiß es nicht.

Zusamenfassend; undefined ist, wo keine Vorstellung von dem Ding existiert; Es hat keinen Typ und es wurde nie zuvor in diesem Bereich referenziert. null ist, wo das Ding bekannt ist zu existieren, aber es ist nicht bekannt, was der Wert ist.

Eine Sache zu erinnern ist, dass null ist konzeptionell nicht das Gleiche wie false oder "" oder dergleichen, auch wenn sie nach dem Typgießen, d.h.

name = false;

Sie: Was ist name?
JavaScript: Boolesch falsch.

name = '';

Sie: Was ist name?
JavaScript: Leerer String


*: name in diesem Zusammenhang ist gemeint als eine Variable, die nie definiert wurde. Es könnte jede undefinierte Variable sein. Name ist jedoch eine Eigenschaft von fast jedem HTML-Formularelement. Es geht weit, weit zurück und wurde gut vor ID eingeführt. Es ist nützlich, weil IDs eindeutig sein müssen, aber Namen nicht sein müssen.


1439
2018-04-29 13:31



Der Unterschied kann in diesem Snippet zusammengefasst werden:

alert(typeof(null));      // object
alert(typeof(undefined)); // undefined

alert(null !== undefined) //true
alert(null == undefined)  //true

Überprüfung

object == null ist anders zu prüfen if ( !object ).

Letzteres ist gleich ! Boolean(object)weil das Unäre ! Operator wirft den rechten Operanden automatisch in einen booleschen Wert.

Schon seit Boolean(null) ist dann falsch !false === true.

Also wenn dein Objekt ist nicht null, aber  falsch oder 0 oder "", der Scheck wird vergehen weil:

alert(Boolean(null)) //false
alert(Boolean(0))    //false
alert(Boolean(""))   //false

137
2018-04-29 06:44



null ist kein Objekt, es ist ein primitiver Wert. Sie können beispielsweise keine Eigenschaften hinzufügen. Manchmal nehmen Menschen fälschlicherweise an, dass es ein Objekt ist, weil typeof null kehrt zurück "object". Aber das ist eigentlich ein Fehler (der vielleicht sogar in ECMAScript 6 behoben wurde).

Der Unterschied zwischen null und undefined ist wie folgt:

  • undefined: wird von JavaScript verwendet und bedeutet "kein Wert". Nicht initialisierte Variablen, fehlende Parameter und unbekannte Variablen haben diesen Wert.

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

    Der Zugriff auf unbekannte Variablen erzeugt jedoch eine Ausnahme:

    > unknownVariable
    ReferenceError: unknownVariable is not defined
    
  • null: von Programmierern verwendet, um "keinen Wert" anzuzeigen, z. als Parameter für eine Funktion.

Eine Variable untersuchen:

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

In der Regel sollten Sie immer === und niemals == in JavaScript verwenden (== führt aus alle Arten von Konvertierungen das kann zu unerwarteten Ergebnissen führen). Die Prüfung x == null ist ein Randfall, weil es für beide funktioniert null und undefined:

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

Eine gängige Methode, um zu überprüfen, ob eine Variable einen Wert hat, besteht darin, sie in einen booleschen Wert zu konvertieren und festzustellen, ob dies der Fall ist true. Diese Umwandlung wird von der if Anweisung und der boolesche Operator! ("nicht").

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";
}

Nachteil dieses Ansatzes: Alle folgenden Werte werden ausgewertet false, also müssen Sie vorsichtig sein (z. B. können die obigen Überprüfungen nicht unterscheiden zwischen undefined und 0).

  • undefined, null
  • Booleans: false
  • Zahlen: +0, -0, NaN
  • Saiten: ""

Sie können die Konvertierung mit boolean testen Boolean als Funktion (normalerweise ist es ein Konstruktor, mit dem man arbeiten kann) new):

> Boolean(null)
false
> Boolean("")
false
> Boolean(3-3)
false
> Boolean({})
true
> Boolean([])
true

113
2017-11-01 15:06



Was ist der Unterschied zwischen null und undefiniert ??

Eine Eigenschaft, wenn sie keine Definition hat, ist nicht definiert. null ist ein Objekt. Sein Typ ist ein Objekt. null ist ein spezieller Wert, der "kein Wert" bedeutet. undefined ist kein Objekt, sein Typ ist nicht definiert.

Sie können eine Variable deklarieren, sie auf null setzen, und das Verhalten ist identisch, außer dass Sie "null" ausgedruckt gegen "undefiniert" sehen. Sie können sogar eine Variable, die nicht definiert ist, mit null oder umgekehrt vergleichen, und die Bedingung wird erfüllt:

 undefined == null
 null == undefined

Beziehen auf JavaScript Unterschied zwischen null und nicht definiert für mehr Details.

und mit deinem neuen bearbeiten  Ja

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

Beim Testen, ob das Objekt falsch ist, erfüllen beide nur die Bedingung beim Testen von if falschaber nicht wenn es wahr ist

Überprüfe hier: Javascript hatcha


23
2018-04-29 05:52



Erster Teil der Frage:

Warum wird NULL in JavaScript als Objekt betrachtet?

Es ist ein JavaScript-Designfehler, den sie jetzt nicht beheben können. Es sollte Typ Null sein, kein Typ Objekt oder gar nicht. Es erfordert eine zusätzliche Überprüfung (manchmal vergessen) beim Erkennen von realen Objekten und ist eine Quelle von Fehlern.

Zweiter Teil der Frage:

Überprüft


if (object == null) 
Do something 

  das Gleiche wie

if (!object) 
Do something 





Die beiden Prüfungen sind immer beide falsch, mit Ausnahme von:

  • Objekt ist nicht definiert oder null: beide wahr.

  • Objekt ist primitiv und 0, ""oder falsch: zuerst prüfen, falsch, zweitens wahr.

Wenn das Objekt kein primitives, sondern ein reales Objekt ist, wie new Number(0), new String(""), oder new Boolean(false), dann sind beide Prüfungen falsch.

Wenn also "Objekt" als echtes Objekt interpretiert wird, sind beide Prüfungen immer gleich. Wenn Primitive erlaubt sind, sind die Checks für 0 unterschiedlich, ""und falsch.

In Fällen wie object==null, die nicht offensichtlichen Ergebnisse könnten eine Fehlerquelle sein. Gebrauch von == wird nicht empfohlen, verwenden Sie === stattdessen.

Dritter Teil der Frage:

Und auch:

  Was ist der Unterschied zwischen null und nicht definiert?

In JavaScript besteht ein Unterschied darin, dass null vom Typ "object" und nicht definiert vom Typ "undefined" ist.

In JavaScript, null==undefined ist wahr und wird als gleich betrachtet, wenn der Typ ignoriert wird. Warum haben sie das entschieden, aber 0, "" und falsch sind nicht gleich, ich weiß es nicht. Es scheint eine willkürliche Meinung zu sein.

In JavaScript, null===undefined ist nicht wahr, da der Typ gleich sein muss ===.

In Wirklichkeit sind null und undefiniert identisch, da sie beide Nicht-Existenz darstellen. Also, 0, und "" auch für diese Angelegenheit und vielleicht die leeren Behälter [] und {}. So viele Arten der gleichen nichts sind ein Rezept für Fehler. Eine Art oder keine ist besser. Ich würde versuchen, so wenig wie möglich zu verwenden.

'falsch', 'wahr' und '!' sind eine weitere Tasche von Würmern, die zum Beispiel vereinfacht werden könnte, if(!x) und if(x) allein sind ausreichend, du brauchst nicht wahr und falsch.

Ein erklärt var x Der Typ ist nicht definiert, wenn kein Wert angegeben ist. Er sollte jedoch derselbe sein, als ob x nie deklariert wurde. Eine weitere Fehlerquelle ist ein leerer Nichtscontainer. Also ist es am besten, es zusammen zu deklarieren und zu definieren, wie var x=1.

Die Leute gehen im Kreis herum und versuchen, all diese verschiedenen Arten von Nichts herauszufinden, aber in komplizierten anderen Kleidern ist alles dasselbe. Die Realität ist

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

Und vielleicht sollten alle Ausnahmen auslösen.


18
2017-07-14 22:15



var x = null;

x ist als null definiert

y ist nicht definiert; // weil ich es nicht definiert habe

if (!x)

null wird als falsch gewertet


10
2018-04-29 05:56



Eine Möglichkeit, Null und undefiniert zu verstehen, besteht darin, zu verstehen, wo jeder auftritt.

Erwarte einen Null-Rückgabewert in den folgenden Situationen:

  • Methoden, die das DOM abfragen

    console.log(window.document.getElementById("nonExistentElement"));
    //Prints: null
    
  • JSON-Antworten, die von einer Ajax-Anfrage empfangen wurden


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

  • Neue Funktionalität, die sich im Fluss befindet. Folgendes gibt null zurück:


        var proto = Object.getPrototypeOf(Object.getPrototypeOf({}));

       // But this returns undefined:

        Object.getOwnPropertyDescriptor({}, "a");

Alle anderen Fälle von Nicht-Existenz werden mit undefiniert bezeichnet (wie von @ Axel angegeben). Jeder der folgenden Ausdrucke "undefiniert":

    var uninitalised;
    console.log(uninitalised);

    var obj = {};
    console.log(obj.nonExistent);

    function missingParam(missing){
        console.log(missing);
    }

    missingParam();

    var arr = [];
    console.log(arr.pop());        

Natürlich, wenn Sie beschließen, var unitialised = null zu schreiben; oder geben Sie null von einer Methode selbst zurück, dann haben Sie in anderen Situationen Null. Aber das sollte ziemlich offensichtlich sein.

Ein dritter Fall ist, wenn Sie auf eine Variable zugreifen möchten, aber Sie nicht einmal wissen, ob es deklariert wurde. Verwenden Sie in diesem Fall typeof, um einen Referenzfehler zu vermeiden:

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

Zusammenfassend prüfen Sie auf Null, wenn Sie das DOM manipulieren, mit Ajax umgehen oder bestimmte ECMAScript 5-Funktionen verwenden. Für alle anderen Fälle ist es sicher, mit strenger Gleichheit auf undefiniert zu prüfen:

if(value === undefined){
  // stuff
}

7
2018-05-07 10:06



Vergleich vieler verschiedener Null-Checks in 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

JavaScript Null Check Comparison Chart


7
2018-04-29 15:23