2013-11-09 8 views
2

JavaScript는 C 또는 C++과 같이 문자열을 종료하지 않는다는 것을 알고 있지만 설명 할 수없는 경우가 있습니다. (Node.js를의 v0.10.5에서 실행) 다음 코드에서이상한 날짜()가 NULL 바이트를 포함하는 문자열로 생성 됨

봐 :

> 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 ''둘 다''\ 000, '\ x00'과'\ u0000'가 실제로 같은 값이기 때문에'test \ u0000other' . –

+0

'\ x00'은 뒤에 오는 것에 관계없이 항상 NULL 바이트이며,'\ 0'은 아무런 숫자도 뒤따라 있지 않을 때 단지 NULL 바이트입니다. –

답변

2

이들은 3 자리 8 진수 이스케이프이며 Null 바이트가 아닙니다. 예를 들어 '123\0456'은 실제로 '123%6'입니다.

+0

아 맞아. 그래서 : '\ 056'은'.'과 같고, '123'+ '\ 056 ''은'123.''과 같고,'new Date ('123. ')'는'new 날짜 (123)'. 나는 그것을 지금 이해한다. ^^ 빠른 답변 주셔서 감사합니다! –