2016-04-25 11 views
5

Ich lese gerade this article auf W3Schools über Typkonvertierung in JS. Dort steht:Art des Datumsobjekts

Es gibt 3 Arten von Objekten:

  • Objekt
  • Datum
  • Array

Das bin ich verwirrt, weil meines Wissens gibt es nicht Jeder Unterschied zwischen Date Objekten und anderen Objekten (typeof (new Date()) gibt "object" zurück). Zuerst dachte ich, dass es etwas Besonderes ist, weil es nativen Code enthält, aber es gibt Dutzende von Funktionen mit nativem Code.

Ist dieser Artikel falsch? Oder könnte mir jemand sagen, warum das Date Objekt so außergewöhnlich ist, dass es als eine separate Art von Objekt betrachtet wird?

+5

Sie sollten "Vertrauen", was 'typeof' kehrt nicht wirklich. Schließlich ist 'typeof null'' 'object'' :) –

+2

Obwohl sich W3Schools in letzter Zeit stark verbessert haben, sollten Sie der Website nicht vertrauen, da sie immer noch irreführende Informationen enthält. Empfehlen Sie stattdessen, MDN zu lesen. – Raptor

+2

Es gibt viel mehr [eingebaute Objekte] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects) als diese drei - an einem bestimmten Objekttyp gibt es nichts Besonderes - Sie sind nur API-Schnittstellen. – Emissary

Antwort

9

Lemmes sagen Sie eine grundlegende Sache. Die Artikel in W3Schools sind definitiv veraltet, also darf man sich nicht darauf verlassen. Ja, wenn Sie diese in der Konsole geben:

typeof (new Date()) 

Der obige Code gibt object, da die JavaScript nur ein paar primitive Typen:

können Sie überprüfen, ob es sich um ein date Objekt ist oder nicht verwenden:

(new Date()) instanceof Date 

Der obige Code wird true zurückgeben. Dies ist der richtige Weg, um zu überprüfen, ob die bestimmte Variable eine Instanz eines bestimmten Typs ist.

+0

Außer dass * instanceof * nicht über Frames hinweg funktioniert. – RobG

+0

@RobG Warum kommt 'frame' hier rein? Und was genau meinst du? –

+0

Wenn ein Datum über Frames hinweg übergeben wird, ist es keine Instanz des Date-Konstruktors im zweiten Frame. Siehe [* diese Frage *] (http://stackoverflow.com/questions/6473273/why-are-myarray-instanceof-array-and-myarray-constructor-array-both-false-wh/6473338#6473338), es ist über Arrays, aber gilt für jedes Objekt, das in einem anderen Frame erstellt wurde. – RobG

1

Sie könnten dafür, eine Instanz eines bestimmten Typs ein Objekt auch prüfen, ob es durch die Überprüfung hat eine Methode, die auf den Objekttyp in Frage spezifisch ist:

if (myobject.hasOwnProperty("getUTCMilliseconds")) { 
    // myobject is a Date... 

Die gleiche Technik kann helfen Sie Arrays in Javascript zu identifizieren:

Prüfung
typeof(myobject) 

Ausbeuten "object", nicht "array" wenn myobject wirklich ein Array ist, so dass ich

if (myobject.hasOwnProperty("slice")) { 
    // we are dealing with an array here ... 
Verwandte Themen