Wird ein Array an den JavaScript Date-Konstruktor übergeben, ist das Standard?

8

Dies funktioniert in Chrome:

%Vor%

Und ich bekomme den 5. Juni 2012. Ich habe auch einen Android-Browser ausprobiert und bekomme die gleichen Ergebnisse. Das Gleiche funktioniert jedoch nicht in Firefox oder Safari. Ich könnte sagen:

%Vor%

Aber das wäre am 5. Juli 2012 so, wie es sollte, und das bekomme ich auch mit Chrome.

Meine Frage: ist der erste Beispielteil des ECMA-Standards? Ist Chrome nur ein Vorreiter und könnte ich erwarten, dass andere Browser es in Zukunft unterstützen? Oder ist es nur ein v8-ism, den ich für die Portabilität vermeiden sollte?

Ich habe versucht, Referenzen für diese spezielle Form des Date-Konstruktors zu finden, konnte aber keine finden.

    
Edward Samson 02.07.2012, 09:44
quelle

4 Antworten

15

Die ES5-Spezifikation enthält Einzelheiten zum new Date(value) -Formular des Konstruktors Date . Im Algorithmus zur Verarbeitung dieses Formulars wird value in einen primitiven Wert konvertiert, indem die [[DefaultValue]] interne Methode des Objekts.

Das Konvertieren eines Arrays in einen primitiven Wert erfolgt im Wesentlichen durch Konvertieren des Arrays in eine Zeichenfolge. Das Konvertieren eines Arrays in eine Zeichenfolge ( Array.prototype.toString ) entspricht im Grunde dem Aufruf von dateArray.join() .

Daher sieht Ihr Aufruf des Konstruktors Date folgendermaßen aus:

%Vor%

Wenn die Zeichenfolge von der Methode Date.parse erkannt werden kann, werden Sie dies tun endet mit einer Date -Instanz.

Diese Form des Date -Konstruktors ist auch in MDN aufgelistet als new Date(dateString) .

Firefox scheint zu versagen, wenn Sie ein Array übergeben, aber es ist erfolgreich, wenn Sie die Zeichenfolgendarstellung dieses Arrays übergeben. Ich würde sagen, dass das wahrscheinlich ein Firefox-Bug ist, aber ich interpretiere vielleicht die ES5-Spezifikation falsch.

    
James Allardice 02.07.2012, 09:56
quelle
4

Sie können Spread Syntax in ES6 verwenden.

>

%Vor%
    
Illuminator 23.11.2016 06:53
quelle
3

Wie wäre es damit:

%Vor%

Sie verwenden apply , um die neue Funktion aufzurufen, die Sie mit bind mit Array-Elementen als Argumente erstellt haben.

Quelle: Ссылка

    
Jure Triglav 27.10.2014 14:02
quelle
1

Basiert auf Jures Antwort . Ich habe geklärt Sergios Frage in den Kommentaren, indem gezeigt wird, dass der null tatsächlich der Umfang des Aufrufs ist.

%Vor%
    
Mr. Polywhirl 04.04.2016 16:57
quelle

Tags und Links