2014-07-04 40 views
2

我从表达返回true(我选择1==1)开始,在控制台为什么parseInt()不会将“true”转换为数字,而相乘?

cosole.log(1==1); 

它记录true写的。现在我想将它转换为整数(1),敷在parseInt()

console.log(parseInt(1==1)); 

它记录NaN。看起来它试图将1==1转换为字符串,然后将其转换为数字。 那我就简单地以1

console.log((1==1)*1); 

它记录11==1

为什么在第一种情况下将其转换其转换true字符串转换成整型前(导致NaN),而我想将其转换为字符串,并把它转换true直接整数第二种情况?我预计true*1也将是NaN

+0

你可能想观看这部影片:https://www.destroyallsoftware.com/talks/wat – gontrollez

+0

parseInt函数使得第一个参数字符串(“真” ),然后尝试将字符串转换为数字(为什么你会得到NaN)。 – scragar

+0

'true * 1'是'1',所以实际上你只是在执行'parseInt(1)' – Carpetsmoker

回答

4

parseInt由于是一个“parse”r,应该接受一个字符串并产生一个整数,所以它将它的参数转换为一个字符串。 *,因为它是乘法,所以将它的参数转换为数字。

如果要将任何东西转换为(32位)整数,则可以使用| 0;它是一个32位的按位整数运算,并且不能导致NaN,因为这不是32位整数。

只是为了强调parseInt是一种完全不恰当的方式,它只是将一个字符串转换为一个整数:这会给您带来什么?

parseInt(5000000000000000000000000) 

(对于数字那么大,使用Math.round(x),或Math.round(+x)如果你喜欢要明确。)

+0

'Number(true)'的作用也是如此 – hindmost

+0

@statemost:'Number'转换为数字,如'*'和一元'+'不是整数。 – Ryan

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

我相信,JavaScript却使true = 1false = 0当你乘它。

编辑:进一步此,parseInt(bool*bool)也将工作

相关问题