题目
var str = 'abc123';
var num = parseInt(str);
if (num == NaN) {
alert(NaN);
} else if (num == 123) {
alert(123);
} else if (typeof num == 'number') {
alert('number');
} else {
alert('str');
}
解析
parseInt(string, radix)
将一个字符串string
转换为radix
进制的整数,radix
为介于2-36
之间的数;parseInt
函数没有传第二个参数(进制)的时候,默认为10
进制;- 而字符串
abc123
是无法通过10进制解析的,所以转换的结果为NaN
,即parseInt('abc123') = NaN
; NaN != NaN && NaN !== NaN
,NaN与NaN之间是互不相等的;typeof NaN === 'number'
,所以最后alert('number');
。
考点
- 对
parseInt(string, radix)
第二个进制位的考察; NaN != NaN
;typeof NaN === 'number'
。
答案
alert('number');
拓展
如果上述题目修改一下(给parseInt
添加了第二个参数为16,表示按照16进制转换):
var str = 'abc123';
var num = parseInt(str, 16);
if (num == NaN) {
alert(NaN);
} else if (num == 123) {
alert(123);
} else if (typeof num == 'number') {
alert('number');
} else {
alert('str');
}
转换结果为
parseInt('abc123', 16) = 11256099;
同样答案为
alert('number');