我从表达式返回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
。
答案 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 = 1
和false = 0
。
编辑:为了进一步说明,parseInt(bool*bool)
也可以正常工作