2013-11-09 2 views
2

Я знаю, что JavaScript не NULL завершает строки, такие как 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 byte = '\ x00', а не' \ 0'. –

+0

Фактически оба '' test \ 0other'' и '' test \ x00other' дают тот же результат: '' test \ u0000other'', потому что '\ 0',' \ x00' и ​​'\ u0000' на самом деле одинаковое значение , –

+0

'\ x00' всегда является NULL-байтом, независимо от того, что следует, а' \ 0' - это только NULL-байт, за которым не следует никакая цифра. –

ответ

2

Это 3-значные восьмеричные экраны, а не нулевые байты. Так, например, '123\0456' - это реально '123%6'.

+0

О, хорошо. Итак: '' \ 056'' равно '.',' '123' + '\ 056'' равно '' 123.'', а затем 'new Date (' 123. ')' Такое же, как 'new Дата (123) '. Я понимаю это сейчас. ^^ Спасибо за быстрый ответ! –

Смежные вопросы