Es tut uns leid, dass Sie eine ältere Frage beantwortet haben, aber der Grund, warum Sie sowohl undefiniert als auch null benötigen, ist einfach: In einer prototypbasierten Enten-Typisierungssprache müssen Sie unbedingt zwischen "Dieses Objekt definiert keinen Wert für X" und "Dieses Objekt sagt, X ist" unterscheiden nichts / null / leer ".
Ohne diese Funktion gibt es keine Möglichkeit, die Prototypenkette zu durchlaufen, sodass die Vererbung nicht funktionieren kann. Sie müssen in der Lage sein, festzustellen, dass obj.someProp undefiniert ist, damit Sie sich obj.prototype.someProp ansehen und die Kette weiterleiten können, bis Sie einen Wert finden. Wenn obj.someProp null zurückgeben würde, wäre es unmöglich zu wissen, ob es wirklich null ist oder nur "Schau dir meinen Prototyp an" bedeutet. Der einzige andere Weg, dies zu umgehen, besteht darin, hinter den Kulissen etwas klobige Magie zu injizieren, die Ihre Fähigkeit beeinträchtigt, mit den Prototypenketten zu fusseln und verschiedene andere Teile der schwarzen Magie von JS auszuführen.
Wie ein Großteil von Javascript wirkt die Idee von undefiniert und null zunächst wackelig und dumm, später absolut brillant (dann zurück zu wackelig und dumm, aber mit einer vernünftigen Erklärung).
Eine Sprache wie C # wird nicht kompiliert, wenn Sie auf eine nicht vorhandene Eigenschaft zugreifen, und andere dynamische Sprachen lösen zur Laufzeit häufig Ausnahmen aus, wenn Sie eine nicht vorhandene Eigenschaft berühren. Dies bedeutet, dass Sie spezielle Konstrukte verwenden müssen, um sie zu testen. Plus-Klassen bedeuten, dass Sie beim Instanziieren eines Objekts bereits seine Vererbungskette und alle Eigenschaften kennen - in JS kann ich einen Prototyp in 15 Schritten der Kette ändern, und diese Änderungen werden für vorhandene Objekte angezeigt.
undefined
und wann zu verwendennull