Javascript字符串到数字类型强制

时间:2011-07-15 20:45:16

标签: javascript types

前几天我遇到了这个问题,无法弄清楚究竟发生了什么。将String强制转换为Number类型的规则是什么?为什么它在'5.0.1'的实例中失败?

var numStr = '5.0';
var floatStr = '5.0.1';

//Passes
if (numStr >= 4) {
    alert('5 > 4');
}

//Fails
if (floatStr >= 4) {
    alert('5.0.1 > 4');
}

console.log(parseInt(numStr)); //5
console.log(parseInt(floatStr)); //5

console.log(Number(numStr)); //5
console.log(Number(floatStr)); //NaN

5 个答案:

答案 0 :(得分:12)

嗯,对于一个,"5.0.1"不是浮动指针编号的有效String表示。我原本预计parseInt也会失败。

编辑但是,与输入值相反,parseInt是一个旨在提取更具噪音容忍度的值的函数。

具体的实施细节在EMCA-262

中定义

例如,在应用强制转换Number([value])时,toNumber函数用于执行转换 - 如9.3.1节所述。 parseInt的行为在第15.1.2.2节中描述。​​

答案 1 :(得分:2)

5.0.1不是数字。 5.01是一个数字。它适用于parseInt,因为parseInt忽略了第一个小数后的所有内容。

答案 2 :(得分:0)

当出现无效字符串时,它将开始忽略,但会尝试解析第一部分。

parseInt("23.2332adsasd") -> 23
parseFloat("23.23adsdsd") -> 23.23

答案 3 :(得分:0)

("5.0.1" > 4) - > (Number("5.0.1") > 4) - > (NaN > 4) - >假的。

答案 4 :(得分:-3)

Object.prototype.toNumber=function(){return this-0;}