前端面试题JavaScript篇——2022-09-08

每日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,因此走的是 default 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
// 答案:不会 // 考察 eval 函数 // 因为 eval 会欺骗词法作用域,例如 function test(){eval("var a=1")},创建一个 a 变量 // JS 引擎不确定 eval 是否对 a 进行了引用,所以为了保险,不对其进行优化。 // 相似地,try catch 和 with 也会有同样的问题 // 不建议使用 eval 和 with function 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=https://www.it610.com/article/2,currentValue=1,Math.pow 只接受2个参数,结果 2^1=2 // 第 2 次调用回调的入参:previousValue=2,currentValue=0,Math.pow 只接受2个参数,结果 2^0=1 console.log([].reduce(Math.pow)); // 如果数组为空并且没有提供初始值,reduce 直接抛出错误

    推荐阅读