Frage Was ist der Unterschied zwischen null und undefined in JavaScript?


Ich möchte wissen, wo der Unterschied liegt null und undefined in JavaScript.


826
2018-02-22 10:30


Ursprung


Antworten:


In JavaScript, undefined bedeutet, dass eine Variable deklariert wurde, aber noch kein Wert zugewiesen wurde, wie:

var TestVar;
alert(TestVar); //shows undefined
alert(typeof TestVar); //shows undefined

null ist ein Zuweisungswert. Es kann einer Variablen als Repräsentation ohne Wert zugewiesen werden:

var TestVar = null;
alert(TestVar); //shows null
alert(typeof TestVar); //shows object

Aus den vorhergehenden Beispielen ist klar, dass undefined und null sind zwei verschiedene Arten: undefined ist ein Typ selbst (undefiniert) während null ist ein Objekt.

null === undefined // false
null == undefined // true
null === null // true

und

null = 'value' // ReferenceError
undefined = 'value' // 'value'

825
2018-02-22 10:31



Ich habe das ausgewählt Hier 

Der undefinierte Wert ist ein primitiver Wert, der verwendet wird, wenn eine Variable nicht existiert   wurde ein Wert zugewiesen.

Der Nullwert ist ein primitiver Wert, der die Null, leer,   oder nicht vorhandene Referenz.

Wenn Sie eine Variable über var deklarieren und ihr keinen Wert zuweisen, hat sie den Wert undefined. Wenn Sie versuchen, WScript.Echo () oder alert () diesen Wert zu verwenden, sehen Sie nichts. Wenn Sie jedoch eine leere Zeichenfolge anfügen, wird es plötzlich angezeigt:

var s;
WScript.Echo(s);
WScript.Echo("" + s);

Sie können eine Variable deklarieren, sie auf null setzen, und das Verhalten ist identisch, außer dass Sie "null" ausgedruckt gegen "undefiniert" sehen. Das ist ein kleiner Unterschied.

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

Sie werden jedoch als zwei verschiedene Arten betrachtet. Während undefined ist ein Typ für sich selbst, wird null als ein spezieller Objektwert betrachtet. Sie können dies mithilfe von typeof () sehen, das eine Zeichenfolge zurückgibt, die den allgemeinen Typ einer Variablen darstellt:

var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));

Das Ausführen des obigen Skripts führt zu folgender Ausgabe:

undefined
object

Ungeachtet dessen, dass sie unterschiedliche Typen sind, werden sie immer noch gleich handeln, wenn Sie versuchen, auf ein Mitglied von beiden zuzugreifen, z. das heißt, sie werden eine Ausnahme werfen. Mit WSH werden Sie sehen, dass der gefürchtete "'varname' null oder kein Objekt ist" und das ist, wenn Sie Glück haben (aber das ist ein Thema für einen anderen Artikel).

Sie können eine Variable explizit als undefiniert festlegen, aber ich rate dringend davon ab. Ich empfehle nur, Variablen auf null zu setzen und den Wert für Dinge, die Sie vergessen haben, undefiniert zu lassen. Gleichzeitig ermutige ich Sie wirklich, immer alle Variablen einzustellen. JavaScript hat eine andere Scope-Kette als die der C-Style-Sprachen, die selbst erfahrene Programmierer leicht verwirren können, und das Setzen von Variablen auf null ist der beste Weg, Bugs zu verhindern, die darauf basieren.

Eine weitere Instanz, bei der Sie ein undefiniertes Popup sehen, ist der Löschoperator. Diejenigen von uns aus einer C-Welt können dies fälschlicherweise als Zerstörung eines Objekts interpretieren, aber es ist nicht so. Durch diese Operation wird ein Index aus einem Array oder einem Element aus einem Objekt entfernt. Bei Arrays wirkt sich dies nicht auf die Länge aus, sondern der Index wird als undefiniert betrachtet.

var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);

Das Ergebnis des obigen Skripts ist:

0.) a
1.) undefined
2.) c

Sie erhalten auch undefined zurückgegeben, wenn Sie einen Index oder ein Mitglied lesen, das nie existiert.

Der Unterschied zwischen null und undefined ist: JavaScript wird niemals irgendwas auf null setzen, das ist normalerweise was wir tun. Während wir Variablen auf undefiniert setzen können, bevorzugen wir null, weil es für uns nie etwas ist. Wenn Sie debuggen, bedeutet dies, dass alles, was auf null gesetzt ist, von Ihnen selbst und nicht von JavaScript ausgeführt wird. Darüber hinaus sind diese beiden speziellen Werte nahezu gleichwertig.


58
2018-02-22 10:34



Null ist ein spezielles Schlüsselwort, das auf fehlende Werte hinweist.

denke darüber nach als Wert, wie:

  • "foo" ist eine Zeichenfolge,
  • wahr ist boolesch,
  • 1234 ist die Nummer,
  • null ist nicht definiert.

nicht definiert Eigenschaft zeigt an, dass einer Variablen kein Wert einschließlich null zugewiesen wurde. Mögen

var foo;

definierte leere Variable ist null des Datentyps undefined


Beide vertreten eine Wert einer Variablen ohne Wert

UND null repräsentiert nicht a Zeichenfolge das hat keinen Wert - leere Zeichenfolge-


Mögen

var a = ''; 
console.log(typeof a); // string 
console.log(a == null); //false 
console.log(a == undefined); // false 

Jetzt, wenn

var a;
console.log(a == null); //true
console.log(a == undefined); //true 

ABER

var a; 
console.log(a === null); //false 
console.log(a === undefined); // true

DAMIT Jeder hat seinen eigenen Weg zu benutzen

nicht definiert Verwenden Sie es, um den variablen Datentyp zu vergleichen

Null Verwenden Sie es, um einen Wert einer Variablen zu leeren

var a = 'javascript';
a = null ; // will change the type of variable "a" from string to object 

27
2017-10-25 20:58



Null: Abwesenheit von Wert für eine Variable; nicht definiert: Abwesenheit der Variablen selbst;

..wo Variable ist ein symbolischer Name, der einem Wert zugeordnet ist.

JS könnte so freundlich sein, neu deklarierte Variablen implizit mit zu initialisieren Nullaber das tut es nicht.


13
2017-07-03 13:59



Bitte lesen Sie das Folgende sorgfältig durch. Es soll alle Ihre Zweifel bezüglich beseitigen der Unterschied zwischen Null und nicht definiert in JavaScript. Sie können auch die unten angegebene Dienstprogrammfunktion verwenden, um Typen genau zu bestimmen.

In JavaScript können wir folgende Arten von Variablen haben.

  1. Nicht deklarierte Variablen
  2. Deklarierte, aber nicht zugewiesene Variablen
  3. Variablen mit Literal zugewiesen nicht definiert
  4. Variablen mit Literal zugewiesen Null
  5. Variablen, die mit irgendetwas anderem als zugewiesen sind nicht definiert oder Null

Im folgenden wird jeder dieser Fälle einzeln erläutert

  1. Nicht deklarierte Variablen: Folgendes gilt für nicht deklarierte Variablen

    • Kann nur von überprüft werden Art der() Das gibt String zurück 'nicht definiert'
    • Kann nicht mit überprüft werden == oder === oder von ob oder bedingter Operator ?         (löst Referenzfehler)
  2. Deklarierte, aber nicht zugewiesene Variablen

    • Art der gibt String zurück 'nicht definiert'
    • == überprüfen mit Null kehrt zurück wahr
    • == überprüfen mit nicht definiert kehrt zurück wahr
    • === überprüfen mit Null kehrt zurück falsch
    • === überprüfen mit nicht definiert kehrt zurück wahr
    • ob oder bedingter Operator ? kehrt zurück falsch
  3. Variablen mit Literal zugewiesen  nicht definiert: Diese Variablen werden ähnlich behandelt wie die Deklarierte aber nicht zugewiesene Variablen.

  4. Variablen mit Literal zugewiesen  Null

    • Art der gibt String zurück 'Objekt'
    • == überprüfen mit Null kehrt zurück wahr
    • == überprüfen mit nicht definiert kehrt zurück wahr
    • === überprüfen mit Null kehrt zurück wahr
    • === überprüfen mit nicht definiert kehrt zurück falsch
    • ob oder bedingter Operator ? gibt false zurück
  5. Variablen, die mit irgendetwas anderem als zugewiesen sind  nicht definiert oder Null

    • typeof gibt eine der folgenden Zeichenfolgen zurück: 'Zeichenfolge','Nummer','boolesch','Funktion', 'Objekt','Symbol'

Im Folgenden finden Sie den Algorithmus für die korrekte Typprüfung einer Variablen:

  1. Prüfen Auf nicht deklariert/nicht zugewiesen/zugewiesen mit  nicht definiert verwenden Art der. Rückgabe wenn Zeichenfolge 'nicht definiert' ist zurück gekommen.
  2. Prüfen Auf Null verwenden ===. Rückkehr 'Null' ob wahr.
  3. Überprüfen Sie den tatsächlichen Typ mit Art der. Rückgabetyp wenn nicht gleich 'Objekt'
  4. Anruf Object.prototype.toString.call (o) um den tatsächlichen Objekttyp zu bestimmen. Es soll eine Zeichenfolge vom Typ zurückgegeben werden '[Objekt Objekttyp]'für all das eingebaute Javascript oder DOM definierte Objekte. Für benutzerdefinierte Objekte gibt es zurück '[Objekt Objekt]'

Sie können auch die folgende Dienstprogrammfunktion zum Bestimmen von Typen verwenden. Es unterstützt derzeit alle ECMA 262 2017 Typen.

function TypeOf(o,bReturnConstructor)
 {
   if(typeof o==='undefined') return 'undefined'
   if(o===null) return 'null'   
   if(typeof o!=='object') return typeof o

   var type=Object.prototype.toString.call(o)
  switch(type)
  {
     //Value types:4
     case '[object Number]': type='number';break;
     case '[object String]': type='string';break;
     case '[object Boolean]': type='boolean';break;
     case '[object Date]': type='date';break;


   //Error Types:7
     case '[object Error]': type='error';break;
     case '[object EvalError]': type='evalerror';break;
     case '[object RangeError]': type='rangeerror';break;
     case '[object ReferenceError]': type='referenceerror';break;
     case '[object SyntaxError]': type='syntaxerror';break;
     case '[object TypeError]': type='typeerror';break;
     case '[object URIError]': type='urierror';break;


    //Indexed Collection and Helper Types:13
     case '[object Array]': type='array';break;
     case '[object Int8Array]': type='int8array';break;
     case '[object Uint8Array]': type='uint8array';break;
     case '[object Uint8ClampedArray]': type='uint8clampedarray';break;
     case '[object Int16Array]': type='int16array';break;
     case '[object Uint16Array]': type='uint16array';break;
     case '[object Int32Array]': type='int32array';break;
     case '[object Uint32Array]': type='uint32array';break;
     case '[object Float32Array]': type='float32array';break;
     case '[object Float64Array]': type='float64array';break;
     case '[object ArrayBuffer]': type='arraybuffer';break;
     case '[object SharedArrayBuffer]': type='sharedarraybuffer';break;
     case '[object DataView]': type='dataview';break;

    //Keyed Collection Types:2
     case '[object Map]': type='map';break;
     case '[object WeakMap]': type='weakmap';break;

    //Set Types:2
     case '[object Set]': type='set';break;
     case '[object WeakSet]': type='weakset';break;

    //Operation Types
    case '[object RegExp]': type='regexp';break;
    case '[object Proxy]': type='proxy';break;
    case '[object Promise]': type='promise';break;

    case '[object Object]': type='object';
             if(bReturnConstructor && o.constructor) type=o.constructor.toString().match(/^function\s*([^\s(]+)/)[1];
         break;
    default:
        type=type.split(' ')[1]
        type=type.substr(0,type.length-1)   

   }
    return type 
}

10
2017-09-21 13:05



Undefiniert bedeutet, dass eine Variable deklariert wurde, aber keinen Wert hat:

var var1;
alert(var1); //undefined
alert(typeof var1); //undefined

Null ist eine Aufgabe:

var var2= null;
alert(var2); //null
alert(typeof var2); //object

7
2018-02-22 10:34



Sie können es als undefiniert ansehen, dass eine Systemebene, eine unerwartete oder fehlerartige Abwesenheit von Wert und null dargestellt wird, um die normale oder erwartete Abwesenheit von Wert auf Programmebene darzustellen.

über JavaScript: Der endgültige Leitfaden


7
2018-06-29 08:37