前端面试题(错题集锦)
面试题来源 - 牛客网
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 就有 text
、value
、index
、disabled
、label
、selected
、dataset
、defaultSelected
等属性
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. 以下哪些事件支持冒泡?