前端面试题错题集锦(持续更新)

前端面试题(错题集锦)

面试题来源 - 牛客网

2020年 3 月 8 日

1. 从字符串 const str = ‘qwbewrbbeqqbbbweebbbbqee’;中能得到结果 [“b”, “bb”, “bbb”, “bbbb”] 以下错误语句是?


解析 : 这道题问的是错误的, 所以自己没审仔细审题, 直接选了第一项正确的, 也是对正则不熟悉的表现, B 错的原因就是因为 * 代表 0 ~ n 次, 所以匹配的结果应该都是 " " , 因为 * 能匹配到 0 个就不会去多匹配 。
在这里插入图片描述

2.下列js延迟加载的方式中,只有IE浏览器支持的是哪一种方式?()

备注:该题可能过时,请按照之前的知识选择。

在这里插入图片描述
在这里插入图片描述
其实这道题上来就排除了前 3 项,因为这 3 种方式现在各大浏览器基本都支持了。都啥年代了, 所以这应该是一道比较老的题。
下面是兼容性对比图 :
在这里插入图片描述

3. 关于身份证号,以下正确的正则表达式为( )

在这里插入图片描述
这道题上来我就先判断位数, 结果发现 A B 都是 15 位, C D 是 18 位, 数数自己的身份证位数, 果断排除 A B,结果就错了, 但其实现在哪还有 15 位的身份证, 所以这道题的答案是错的。
所以真正的答案在 C 和 D 中选择, 判月份这块应该是 0 ~ 9月或者10 ~ 12 月,也即 ((0\d)|(1[0-2]))。但是 D 向直接来一个 ((9\d)|(1[9-2])) 19 月是什么鬼 ? 所以这道题应该选择 C 项。但是 C 项也有瑕疵。判断年份直接使用 [1-9]\d{3} 请问 8333 这个年份是否也正确 ? 显然不是的, 所以年份这块只能是 以18,19或20,30开头
身份证正则构成 :
前 6 位 : 地址码 【数字 => [1-9]\d{5}】
7~10位 : 出生年份 【数字 => (18|19|20)\d{2}】
11~12位 : 月份 【数字 => (0[1-9]|1[0-2])】
13~14位 : 日期 【数字 => ([0-2][1-9]) | [1,2,3]0|31】
15~17位 : 顺序码 【数字 => \d{3}】
最后一位 : 校验码 【数字或者X / x => [0-9Xx]】
所以随后得出正则 : /[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:(?:[0-2][1-9])|[1,2,3]0|31)\d{3}[0-9Xx]/

	let reg = /[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:(?:[0-2][1-9])|[1,2,3]0|31)\d{3}[0-9Xx]/.exec("130827199804070017");
	console.log(reg.exec("${您的身份证号码}")); // 通过验证

参考资料 :
身份证号码的正则表达式
身份证号码的正则表达式及验证详解
身份证号码一般多少位?

4. 判断对象myObj是否存在的写法,下面说法错误的是( )

在这里插入图片描述
解析 :

首先明白题意 : 这道题的意思是 : myObj 这个对象是否存在 ? (言外之意该对象以前至少存在过只不过现在不确定了, 而不是去纠结它声明与定义, 因为以前一定是定义过,这不过现在不确定了, 问你怎么才能检测一下这个对象还存在呢吗?? ?? -> 人家是问的这个意思 : )
解题思路 :
在这里插入图片描述

5. 以下哪些对象是Javascript内置的可迭代对象?

在这里插入图片描述
解析 :
在这里插入图片描述在这里插入图片描述

2020 年 3 月 9 日

1. 如何获取下面表单 select域的选择部分的文本?

在这里插入图片描述
在这里插入图片描述
每个 dom 元素都有很多的属性与方法。自己真是孤陋寡闻了。
像 select 选择器中的 option 就有 textvalueindexdisabledlabelselecteddatasetdefaultSelected 等属性

selector.options[selector.selectedIndex].text; // "1"

在这里插入图片描述

2. 以下代码执行后,console 的输出是?

在这里插入图片描述
在这里插入图片描述
这道题是笔者对 ES6 中的 let 理解的不够深刻 :

  • let 声明的变量仅在当前当前的代码块内有效。
  • let 不存在变量提升
  • let 声明的代码块内就具备了块级作用域
  • let 存在暂时性死区(TDZ) : 只要块级作用域存在 let 变量,他所声明的变量就绑定了当前区域,就不再受外界影响了。在 let 声明前面该变量都是不可用的,语法上称之为 “暂时性死区”。
    => 上见面代码可以改写为 :
let x = 10;
let foo = () => {
let x;
console.log(x); // Uncaught ReferenceError: Cannot access 'a' before initialization
x = 20;
x++;
}
foo();
3. typeof Date.now() 的值是:

在这里插入图片描述
这道题没好好审题,人家问的是 Date.now() ,笔者看成了 new Date()

4. 下面说法错误的是( )

在这里插入图片描述
其实原理明白,就是这个D项的答案没理解透,function 有 prototype 属性,虽然 function 也是对象但是你不能因为这个就说对象具有 prototype 属性。虽然 D 项表述上有些诟病但是相比较来说还是正确的。

5. 以下哪些事件支持冒泡?

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值