2016-07-27 7 views
2

Ich habe eine Baumstruktur, die CSS-Selektoren enthält, mein Ziel ist es, den Wert aus dem Eingabeelement, das dem Selektor entspricht, zu nehmen und sie in den Baum zu setzen. Zum Beispiel, wenn es eine <input type="text/> mit der ID-Textbox und dem Wert 67 gibt, möchte ich dies tun {selector: "#textbox"} -> {value: 67}.Warum konvertiert Javascript/typescript implizit ein Datumsobjekt in eine Zeichenfolge?

Ich habe das funktioniert in allen Fällen, außer wenn der Eingabetyp Datum ist. In diesem Fall möchte ich die Zeichenfolge in ein Datumsobjekt konvertieren. Mein Code sieht wie folgt aus

val = sel.val(); 
let type = sel.attr("type"); 
if(type == "number") 
{ 
    val = Number(val); 
} 
else 
if(type == "date") 
{ 
    val = Date(val); 
} 

//#1 
ast["value"] = val; 
//#2 
delete ast.selector; 

Am Punkt # 1, wenn der Eingabetyp Datum ist, val ein Date-Objekt ist. Bei Punkt # 2 ist ast ["value"]/ast.value ebenfalls ein Date-Objekt. Das Drucken des gesamten Ast-Objekts zeigt jedoch ast ["value"]/ast.value als eine Zeichenkette. Dieser Zeichenfolgewert wird durch den Rest des Codes weitergegeben und verursacht Probleme. Dies ist ein Zitat aus der Konsole diesen

Wed Jul 27 2016 10:14:19 GMT-0600 (MDT) eval.js:249 //ast["value"] at point #2 
Object {selector: "this", value: "Wed Jul 27 2016 10:14:19 GMT-0600 (MDT)"} eval.js:250 //ast at point #2 

zeigt Wenn das Datum nicht wurde implizit umgewandelt zu werden, würde der Ausgang

seine
Wed Jul 27 2016 10:14:19 GMT-0600 (MDT) eval.js:249 //ast["value"] at point #2 
Object {selector: "this", value: Wed Jul 27 2016 10:14:19 GMT-0600 (MDT)} eval.js:250 //ast at point #2 

ich diesen Code in Chrome und Firefox getestet habe, sowohl Ausbeute das gleiche Ergebnis.

+2

Sind Sie sicher, dass es eine Zeichenfolge ist? Könnte nur eine Konsole Funktion/"Feature" sein. –

+0

Sie können es immer auf ein Datum umwandeln. Obwohl "Date.prototype.toString" IIRC implementationsabhängig ist, sollten Sie in Ordnung sein, solange Sie das Datum aus der plattformeigenen String-Darstellung konstruieren. –

+0

Wirf es nicht auf ein Date, wenn es kein Date ist! Das ist nur die Dose die Straße hinunter treten. –

Antwort

4

Die Funktion Date() nimmt eine Zahl oder einen String und erzeugt eine Zeichenkette. Read the documentation:

JavaScript-Date-Objekte können nur durch den Aufruf von JavaScript Date als Konstruktor instanziert werden: es als normale Funktion aufrufen (das heißt ohne den neuen Betreiber) eine Zeichenfolge statt einer Date-Objekt zurückgeben; im Gegensatz zu anderen Arten JavaScript-Objekt, haben Date-Objekte JavaScript kein Literalsyntax

Sie wollen wahrscheinlich tatsächlich erzeugt ein Date Objekt new Date(val) statt Date(val) wie diese verwenden.

+0

Die Funktion Date kann von [* null *] (http://www.ecma-international.org/ecma-262/6.0/#sec-date-constructor-date) bis [* sieben *] (http://www.ecma-international.org/ecma-262/6.0/#sec-date-year-month-date-hours-minutes-seconds-ms) Argumente. Das Verhalten ändert sich abhängig davon, wie viele und welcher Typ (wenn nur einer angegeben wurde, der eine Zeichenfolge, eine Zahl oder ein Datum sein kann). – RobG

Verwandte Themen