2016-07-27 47 views
2

我有一個包含css選擇器的樹結構,我的目標是從輸入元素中取得匹配選擇器的值,並將它們放到樹中。例如,如果<input type="text/>帶有id文本框和值67,我想這樣做{selector:「#textbox」} - > {value:67}。爲什麼javascript/typecript將日期對象隱式轉換爲字符串?

我有這個工作在所有情況下,除了當輸入類型是日期。在這種情況下,我想將字符串轉換爲日期對象。我的代碼看起來像這樣

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; 

在點#1,當輸入類型是日期時,val是Date對象。在#2點,ast [「value」]/ast.value也是一個Date對象。但是,打印整個ast對象會顯示ast [「value」]/ast.value作爲字符串。該字符串值通過代碼的其餘部分傳播並導致問題。這是從控制檯顯示此

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 

如果日期並沒有獲得隱式轉換報價,輸出會

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 

我在Chrome和Firefox,無論是產量測試此代碼相同的結果。

+2

你確定這是一個字符串?可能只是一些控制檯功能/「功能」。 –

+0

您可以隨時將其投射到日期。儘管'Date.prototype.toString' IIRC是依賴於實現的,只要你從平臺自己的字符串表示構造Date,你應該沒問題。 –

+0

當它不是日期時,不要將它投射到日期!這只是在路上踢球。 –

回答

4

Date()函數接受一個數字或字符串併產生一個字符串。 Read the documentation

javascript日期對象只能通過調用JavaScript的日期作爲構造函數來實例化:調用它作爲常規函數(即沒有新的運營商)將返回一個字符串,而不是一個Date對象;不像其他的JavaScript對象類型,JavaScript的日期對象沒有文字語法

你可能想使用new Date(val),而不是作爲Date(val)這實際上產生了Date對象。

+0

Date函數可以從[* zero *](http://www.ecma-international.org/ecma-262/6.0/#sec-date-constructor-date)到[* seven *](http:/ /www.ecma-international.org/ecma-262/6.0/#sec-date-year-month-date-hours-minutes-seconds-ms)參數。行爲根據多少和什麼類型(如果只提供一個,可能是字符串,數字或日期)而變化。 – RobG