前端面试题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 直接抛出错误
推荐阅读
- 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档
- 会计老婆大人的前端小跟班儿——node|会计老婆大人的前端小跟班儿——node 操作 Excel 表格
- 生活不止眼前的苟且,还有诗和远方的田野
- 商学院——《沙漠风云》之第一回|商学院——《沙漠风云》之第一回 大小穿越、商战前传,各路精英、蓄势待发
- 收市评论|9月8日A股分析:创业板指跌1.86%,酒店及餐饮涨幅居前
- javascript|高效的MobX 状态管理
- 钛极客|苹果折叠屏没等来,华硕先将OLED折叠屏引入笔记本领域 | 科技前线
- 2020最hit发型,好看的人都剪了!
- 云对象|云对象 - 重新定义前后端交互
- 马斯克(我担心会死在登陆火星之前!SpaceX的进展太慢了…)