2012-01-19 40 views
1

當我創建變量時,在等號後不使用括號。這個javascript變量是什麼意思?

爲什麼此代碼在等號後使用括號?任何人都可以解釋嗎?我想知道在等號後什麼意思。

var start = (new Date).valueOf(), 

回答

1

此方法返回以毫秒爲單位的日期對象的等價性。

毫秒錶示爲一個整數,表示1970年1月1日午夜(GMT)到Date對象中指定的日期和時間之間的毫秒數。

+0

同樣的事情,你的意思的valueOf()函數自動轉換Date對象到毫秒? – dgwkgg

2

的paranthesis各地new Date原因是先計算的,所以日期被創建,然後調用新創建的日期valueOf

這基本上就像做

var d = new Date(); 
var start = d.valueOf(); 

但在一行。

但是,它應該是(new Date()).valueOf()。現在有什麼是錯誤的。

1

簡單的事情。 new Date返回一個日期。沒有括號,它將是new Date.valueOf()。由於Date沒有方法valueOf(),因此會導致錯誤。

但是,Date的一個實例有這個功能。所以我們使用括號。 (new Date).valueOf()相同

var start = new Date; 
start.valueOf(); 
2

的這個意圖是縮短了下面的代碼:

var date = new Date(); 
var start = date.valueOf(); 

,但你不能寫:

var start = new Date().valueOf(); 

,因爲世界上沒有Date().valueOf(),可以用來作爲構造,所以你」將不得不添加大括號。大括號中的部分將首先執行(創建一個新的日期),並且valueOf()將被調用大括號中的代碼結果(讀取:在構建日期)。這就是說,該解決方案是我們在你的問題有:

var start = (new Date).valueOf(); 

這一切的結果是毫秒時間戳。

1

new Date周圍的包裝物將評估創建Date對象的調用,然後調用日期對象的方法 - >valueOf。的更容易理解的例子是

(3 + 2) + 2; // = 7 - evaluates 5 then adds 2 

在定義valueOf方法爲:

返回Date對象的原始值。重寫Object.prototype.valueOf方法。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

實際上,你可以實現通過

var start = +(new Date()) 
// returns the integer value of the date (in milliseconds) 
// aka the primitive value