每日3题

28 以下代码执行后,控制台中的输入内容为?

function showCase(value){    switch(value){        case 'A':            console.log('case A');            break;        case 'B':            console.log('case B');            break;        case undefined:            console.log('undefined');            break;        default:            console.log('Do not know');                }} showCase(new String('A'));

29 以下代码执行后,控制台中的输入内容为?

function f(){}const a = f.prototype,      b = Object.getPrototypeOf(f); console.log(a===b);

30 以下代码执行后,控制台中的输入内容为?

console.log(typeof null)console.log(null instanceof Object)
公众号【明天也要写bug】更多前端面试题

答案与解析

28

// 答案:Do not know// 考查根本字符串、字符串对象和 switch// 字符串字面量是 string 类型// 字符串对象是 object 类型// switch 应用严格运算符(===)来进行比拟// 在上面 switch case 没有匹配的 case,因而走的是 defaultfunction showCase(value) {  switch (value) {    case "A":      console.log("case A");      break;    case "B":      console.log("case B");      break;    case undefined:      console.log("undefined");      break;    default:      console.log("Do not know");  }}showCase(new String("A"));

29

// 答案:不会// 考查 eval 函数// 因为 eval 会坑骗词法作用域,例如 function test(){eval("var a=1")},创立一个 a 变量// JS 引擎不确定 eval 是否对 a 进行了援用,所以为了保险,不对其进行优化。// 类似地,try catch 和 with 也会有同样的问题// 不倡议应用 eval 和 withfunction test() {  var a = 1;  return function () {    eval("");  };}test();

30

// 答案:1 报错// 考查 reduce 办法的应用// reduce 承受两个参数:回调函数和初始值// 若不提供初始值,则以数组第一个元素作为初始值,并且回调函数从数组第二个元素开始调用// 提供初始值,则回调从数组第一个元素开始调用// 回调函数承受4个参数:previousValue、currentValue、currentIndex、array(即遍历的数组)console.log([2, 1, 0].reduce(Math.pow));// 执行步骤如下:初始值:2// 第 1 次调用回调的入参:previousValue=2,currentValue=1,Math.pow 只承受2个参数,后果 2^1=2// 第 2 次调用回调的入参:previousValue=2,currentValue=0,Math.pow 只承受2个参数,后果 2^0=1console.log([].reduce(Math.pow));// 如果数组为空并且没有提供初始值,reduce 间接抛出谬误