前几天我遇到了这个问题,无法弄清楚究竟发生了什么。将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
答案 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;}