题目
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');
