2013-11-09 37 views
2

我知道JavaScript不會終止像C或C++這樣的字符串,但我遇到了一個我無法解釋的情況。使用包含NULL字節的字符串創建奇怪的日期()

請看下面的代碼(在Node.js的v0.10.5執行):

> new Date('123') 

Fri Jan 01 123 00:00:00 GMT+0100 (CET) // UNIX epoch : -58285702800000 

> new Date('123\056') 

Fri Jan 01 123 00:00:00 GMT+0100 (CET) // UNIX epoch : -58285702800000 

> new Date('123\0456') 

Tue Jun 01 123 00:00:00 GMT+0200 (CEST) // UNIX epoch : -58272660000000 

> new Date('123\0567') 

Thu Jul 01 123 00:00:00 GMT+0200 (CEST) // UNIX epoch : -58270068000000 

> new Date('123\0999') 

Fri Jan 01 123 00:00:00 GMT+0100 (CET) // UNIX epoch : -58285702800000 

> new Date('123\0555') 

Sat May 01 123 00:00:00 GMT+0200 (CEST) // UNIX epoch : -58275338400000 

> new Date('123\0655') 

Sat Jan 01 12355 00:00:00 GMT+0100 (CET) // UNIX epoch : 327718911600000 

我不知道這裏發生了什麼,有人可以解釋給我嗎?

似乎有時,NULL字節後的整數定義日期的月份,但月份並不總是對應於以下數字。

+0

NULL字節='\ x00',而不是'\ 0'。 –

+0

實際上''test \ 0other''和''test \ x00other''都給出了相同的結果:''test \ u0000other''因爲'\ 0','\ x00'和'\ u0000'實際上是相同的值。 –

+0

'\ x00'總是一個NULL字節,不管後面是什麼,而'\ 0'只有一個空字節,當它沒有被任何數字跟隨時。 –

回答

2

這些是3位八進制轉義符,而不是空字節。因此,例如'123\0456'是realy '123%6'

+0

噢好吧。所以:''\ 056''等於'。',''123'+'\ 056''等於'123.',然後'new Date('123。')'和'new日期(123)'。我現在明白了。 ^^謝謝你的快速回答! –