在IE8中发现一个奇怪的事情:
parseInt('01')
//1
parseInt('02')
//2
parseInt('03')
//3
/*...*/
parseInt('07')
//7
parseInt('08')
//0 !!!
parseIntr('09')
//9 ok
Run Code Online (Sandbox Code Playgroud)
有人可以澄清吗?
为什么console.log(00);和console.log(01);打印0在浏览器控制台1,而不是00 01?
console.log(00); // prints 0;
console.log(01); // prints 1;
console.log(011); // prints 9;
console.log(0111); // prints 73;
Run Code Online (Sandbox Code Playgroud) 今天早上我注意到了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?
Javascript与具有前导零的值的行为不同.警报(b) - 打印不同的值.
var a = 67116;
var b = 00015;
alert(a);
alert(b);
Run Code Online (Sandbox Code Playgroud)
我更感兴趣的是知道这里通过javascript在alert(b)中应用了什么转换?(如果我用双引号它们.它们工作正常.)
基本上这个脚本将从EndTime中减去StartTime,使用jQuery插件,html表单以HH:MM格式填充开始和结束时间,输入字段用结果填充,除了一个问题外它有效:
如果开始时间是在08:00到09:59之间,那么它只会返回奇怪的结果 - 结果是精确的10小时,为什么?
所有其他输入正确计算!
function setValue() {
var startTime = document.getElementById('ToilA');
var endTime = document.getElementById('EndHours'); startTime = startTime.value.split(":");
var startHour = parseInt(startTime[0]);
var startMinutes = parseInt(startTime[1]);
endTime = endTime.value.split(":");
var endHour = parseInt(endTime[0]);
var endMinutes = parseInt(endTime[1]);
//var hours, minutes;
var today = new Date();
var time1 = new Date(2000, 01, 01, startHour, startMinutes, 0);
var time2 = new Date(2000, 01, 01, endHour, endMinutes, 0); var milliSecs = (time2 - time1);
msSecs = (1000);
msMins = (msSecs * 60); …Run Code Online (Sandbox Code Playgroud) 我将id作为参数传递给javascript函数,因为它来自UI,它是零填充的.但它似乎有(可能)"奇怪"的行为?
console.log(0000020948); //20948
console.log(0000022115); //9293 which is 22115's octal
console.log(parseInt(0000022115, 10)); // 9293 which is 22115's octal
console.log(0000033959); //33959
console.log(20948); //20948
console.log(22115); //22115
console.log(33959); //33959
Run Code Online (Sandbox Code Playgroud)
我怎样才能确保它们解析到正确的数字呢?(十进制)
编辑:
只是让它更清楚:
这些数字来自服务器并且是零填充字符串.我正在为每个人制作一个删除按钮.
喜欢:
function printDelButton(value){
console.log(typeof value); //output string
return '<a href="#" onclick="deleteme('+value+')"><img src="images/del.png"></a>'
}
and
function printDelButton(value){
console.log(typeof value); //output numeric
console.log(value); //here output as octal .... :S
}
Run Code Online (Sandbox Code Playgroud)
我尝试过:__CODE__仍然解析为Octal
我看过这个问题的很多不同的变化,但我似乎找不到一个特别适合我正在做的事情.
我有输入字段,由php/mysql查询动态创建.值是数字,它们共享一个共同的类
<?php
foreach ($garment_sizes as $key =>$value){echo '<input type="number" class="size_select" name="'.$value.'" onchange="qty_update()"/><label class="size_label">'. strtoupper($value).'</label>';
}
?>
Run Code Online (Sandbox Code Playgroud)
产生的HTML:
<input type="number" class="size_select" name="s" onchange="qty_update()"/>
<label class="size_label">S</label>
<input type="number" class="size_select" name="m" onchange="qty_update()"/>
<label class="size_label">M</label> <!-- etc -->
Run Code Online (Sandbox Code Playgroud)
我想创建一个函数来将所有字段与此类"size_select"相加
function qty_update(){
var values = $('.size_select').serializeArray();
//having trouble writing the loop here to sum the array..
}
Run Code Online (Sandbox Code Playgroud) 令人惊讶的是返回0.为什么?什么是获得正确结果的(正确)解决方案?
在解析Int时,似乎应该忽略前导零.这背后的理由是什么?
在_core方法的underscore.js源代码中,他们使用了obj.length === + obj.length.在第一个其他如果条件.为什么他们使用这个+运算符,它的重要性是什么?
var each = _.each = _.forEach = function(obj, iterator, context) {
if (obj == null) return;
if (nativeForEach && obj.forEach === nativeForEach) {
obj.forEach(iterator, context);
} else if (obj.length === +obj.length) {
for (var i = 0, l = obj.length; i < l; i++) {
if (iterator.call(context, obj[i], i, obj) === breaker) return;
}
} else {
for (var key in obj) {
if (_.has(obj, key)) {
if (iterator.call(context, obj[key], key, obj) === breaker) return;
} …Run Code Online (Sandbox Code Playgroud)