写篇文章之前端面试笔试——10.12记录

80 阅读2分钟

1. ['1','2','3'].map(parseInt)

答案:[1,NaN,NaN]

考点:map方法,parseInt方法。

map是数组原型方法,接收一个回调函数用于依次接收数组成员并返回替换值。map返回替换后的数组。

['1','2','3'].map(x=>x*x);//[1,4,9]

📌parseInt方法两个参数,第一个参数是我们需要转换成number的字符串变量。第二个参数可以省略不写,因为数字字符串可以多种进制,所以我们指定第二个参数用来决定解析字符串时的进制规则,如果不写则会自动根据参数一进行选择合适进制,为0同样也会忽略进行自动判断。

  • 如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
  • 如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
  • 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

如果字符串的第一个字符不能被转换为数字,那么 parseInt() 会返回 NaN,而第二个参数不是可用的进制,那么 parseInt() 也会返回 NaN,如果字符串不满足参数二进制写法规则,那么 parseInt() 同样会返回 NaN。

  • 结果分析,因为递归函数会被map方法赋值item、index、array三个参数,所以parseInt第一个参数依次为"1","2","3",所以parseInt第二个参数依次为0,1,2。这里我们知道了1进制不存在,2进制不能出现"3"的写法,只有"1"的才能被真确识别。

parseInt方法在es6时从number方法移植到全局方法(window)。

2. 判断Symbol类型

答案:Object.porotype.toString.call()

可以解决绝大部分的类型判断问题。

原题解:js 判断变量类型,包括ES6 新类型Symbol

function varType(n) {
    var typeStr = Object.prototype.toString.call(n);
    //var typeOfName = (typeof n);
    var typeName = '';
    switch (typeStr){
        case '[object String]':
            typeName = 'string';
            break;
       case '[object Number]':
           typeName = 'number';
           break;
       case '[object Boolean]':
           typeName = 'boolean';
           break;
       case '[object Undefined]':
           typeName = 'undefined';
           break;
       case '[object Object]':
           typeName = 'object';
           break;
       case '[object Array]':
           typeName = 'array';
           break;
       case '[object Null]':
           typeName = 'null';
           break;
       case '[object RegExp]':
           typeName = 'RegExp';
           break;
      case '[object Symbol]':
           typeName = 'symbol';
           break;
      case '[object JSON]':
           typeName = 'json';
           break;
      case '[object Math]':
           typeName = 'math';
           break;
      default:
           typeName = 'object';
     }
     return typeName;
};

测试案例:

console.log(varType("1"));
console.log(varType(1));
console.log(varType({}));
console.log(varType([]));
console.log(varType(function () {}));
console.log(varType(null));
console.log(varType(undefined));
console.log(varType(true));
console.log(varType(NaN));
console.log(varType(Symbol()));
console.log(varType(JSON));
console.log(varType(Date));
console.log(varType(Math));
console.log(varType(RegExp()));