题目

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');
}

解析

  1. parseInt(string, radix) 将一个字符串 string 转换为 radix 进制的整数, radix 为介于2-36之间的数;
  2. parseInt函数没有传第二个参数(进制)的时候,默认为10进制;
  3. 而字符串abc123是无法通过10进制解析的,所以转换的结果为NaN,即parseInt('abc123') = NaN
  4. NaN != NaN && NaN !== NaN,NaN与NaN之间是互不相等的;
  5. typeof NaN === 'number',所以最后alert('number');

考点

  1. parseInt(string, radix)第二个进制位的考察;
  2. NaN != NaN
  3. 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');