为什么parseInt()不会将"true"转换为数字,而乘法会呢?
为什么parseInt()不会将"true"转换为数字,而乘法会呢?
我从返回true
的表达式开始(我选择1==1
),并将其写入控制台:cosole.log(1==1);
它会在控制台打印出true
。现在我想将其转换为整数(1
)并用parseInt()
包裹起来:console.log(parseInt(1==1));
它会打印出NaN
。看起来它在将1==1
转换为数字之前试图将其转换为字符串。然后我只需将1==1
乘以1:console.log((1==1)*1);
它会打印出1
。为什么在第一种情况下它会在将true
转换为整数之前将其转换为字符串(导致NaN
),而我想将其转换为字符串,而在第二种情况下它直接将true
转换为整数呢?我本来期望true*1
也会得到NaN
。
为什么parseInt()函数在转换"true"时不会转换为数字,而乘法运算会?这个问题出现的原因是JavaScript在处理布尔值时的规则。当使用parseInt()函数将布尔值转换为数字时,它会返回NaN(Not a Number)。而使用乘法运算时,JavaScript会将true转换为1,false转换为0。解决方法是使用乘法运算或者将布尔值转换为数字再使用parseInt()函数。
JavaScript中的parseInt()函数用于将字符串转换为整数。它会从字符串的开头开始解析,直到遇到非数字字符为止。如果字符串以非数字字符开头,parseInt()函数会返回NaN。
在给定的例子中,parseInt(bool) == NaN,这是因为parseInt()函数无法将"true"转换为数字。然而,通过将bool乘以1,可以将布尔值转换为数字并进行乘法运算。这样,parseInt(bool*1)将返回与parseInt(int)相同的结果,即数字int。
进一步说,parseInt(bool*bool)也可以正常工作,因为乘法运算会将布尔值转换为数字。这种情况下,parseInt()函数会将结果数字转换为整数。
因此,根据所给的例子,可以得出结论:parseInt()函数在转换"true"时不会将其转换为数字,而乘法运算会将true转换为1,false转换为0。为了解决这个问题,可以使用乘法运算或者先将布尔值转换为数字,然后再使用parseInt()函数。
parseInt函数是一个“解析器”,应该将字符串转换为整数,所以它会将其参数转换为字符串。而乘法运算符*会将其参数转换为数字。
如果想将任何东西转换为(32位)整数,可以使用| 0操作符,它是一个32位位运算,不会产生NaN,因为NaN不是一个32位整数。
强调一下,parseInt对于除了字符串以外的任何类型都是完全不合适的方式来进行类型转换。下面的代码会得到什么结果呢?
parseInt(5000000000000000000000000)
对于如此大的数字,可以使用Math.round(x)来进行转换,或者如果你喜欢更明确的写法,可以使用Math.round(+x)。
Number(true)也可以实现类型转换:Number将值转换为数字,就像*和一元+运算符一样,而不是整数。