为什么parseInt()不会将“true”转换为数字,而乘法呢?

时间:2014-07-04 14:11:44

标签: javascript

我从表达式返回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),而我想将其转换为字符串,而在第二种情况下,它会转换{{1}直接到整数?我希望true也是true*1

2 个答案:

答案 0 :(得分:4)

parseInt,由于是一个“解析”r​​,应该取一个字符串并产生一个整数,因此它将其参数转换为字符串。 *,因为它是乘法,将其参数转换为数字。

如果要将任何转换为(32位)整数,| 0有效;它是一个32位的按位整数运算,不能产生NaN,因为它不是32位整数。

只是要强调parseInt是一种完全不合适的方式,只需将字符串转换为整数:这会给你带来什么?

parseInt(5000000000000000000000000)

(对于较大的数字,如果您想要明确,请使用Math.round(x)Math.round(+x)。)

答案 1 :(得分:2)

parseInt(bool) == NaN
parseInt(bool*1) == parseInt(int) == int

我相信当您将其乘以时,Javascript会生成true = 1false = 0

编辑:为了进一步说明,parseInt(bool*bool)也可以正常工作