今天早上我注意到了JavaScript setFullYear方法的一个特殊问题.
使用这样的方法时:
d.setFullYear(2012,2,8);
Run Code Online (Sandbox Code Playgroud)
返回正确的值:
Thu Mar 08 2012 10:30:04 GMT+0000 (GMT Standard Time)
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用parseInt方法返回整数,则返回的日期不正确:
d.setFullYear(parseInt("2012"), parseInt("02"), parseInt("08"));
Run Code Online (Sandbox Code Playgroud)
收益:
Wed Feb 29 2012 10:31:30 GMT+0000 (GMT Standard Time)
Run Code Online (Sandbox Code Playgroud)
看来parseInt方法返回的值不正确,但是当我测试它时:
document.write(parseInt("2"));
然后返回正确的值(2)
这里有一个工作小提琴:http://jsfiddle.net/rXByJ/
问题在于parseInt还是setFullYear?
问题parseInt('08')是0.这有效:
d.setFullYear(parseInt("2012"), parseInt("02"), 8);
Run Code Online (Sandbox Code Playgroud)
parseInt('08')和parseInt('09')都返回零,因为函数试图确定所用数值系统的正确基数.在Javascript中,以零开头的数字被认为是八进制,并且八进制中没有08或09,因此出现问题.
http://www.ventanazul.com/webzine/articles/issues-parseint-javascript
解决方案是使用第二个参数:
parseInt('08', 10)
Run Code Online (Sandbox Code Playgroud)
要么
Number('08')
Run Code Online (Sandbox Code Playgroud)
另请参阅如何解决JavaScript的parseInt八进制行为?
| 归档时间: |
|
| 查看次数: |
2941 次 |
| 最近记录: |