这些前端大厂面试题你会做吗?每日10题大厂面试题(三)
文章目录
问题1(块级作用域, 引用项)
问题2(扩展符, 扩展运算符, 箭头函数)
问题3(JSON编码字符串)
问题4(布尔值)
问题6(模板字符串)
问题8(临时死区)
问题10(返回值或暂停执行点)
题1 (块级作用域, Reference)
下面输出的是
function checkAge(age) {
if (age < 18) {
const message = 'Sorry, you are too young';
} else {
const message = 'Yay, you are old enough';
}
return message;
}
console.log(checkAge(21));
代码解读
答案:ReferenceError
这道题主要考察:
- 使用const和let关键字声明的变量均具有块级作用域,在大括号({})所包围的代码块内可直接使用这些变量
- 注意到该问题的关键点在于理解块级作用域机制,在这种情况下局部变量无法跨过其定义范围而存在
- ReferenceError(引用错误)对象用于表示未声明变量被引用时产生的错误
题2 (扩展符,箭头函数)
下面输出的是
const getList = ([x, ...y]) => [x, y]
const getUser = user => {name: user.name, age: user.age}
const list = [1, 2, 3, 4]
const user = {name: 'Lydia', age: 21}
console.log(getList(list))
console.log(getUser(user))
代码解读
答案:[1, [2, 3, 4]] , undefined
这道题主要考察:
- 扩展符在这里y采用了扩展符这一机制来表示序列数据,在本例中即为2、3、4三个数值。因此getList函数的返回结果为[1,[2,3,4]]。
- 在处理箭头函数时需要注意以下几点:单一返回值时我们无需显式写出花括号;但如果目标是要让箭头函数返回一个对象,则必须在圆括号内完成相关操作;否则若不加括号则会使得该函数无法正常运行。
const getUser = user => ({name: user.name, age: user.age})
代码解读
题3 (JSON.stringify)
下面输出的是
const settings = {
username: 'lydiahallie',
level: 19,
health: 90
}
const data = JSON.stringify(settings, ['level', 'health'])
console.log(data)
代码解读
答案:“{“level”: 19, “health”: 90}"
这道题主要考察:
JSON.stringify方法中的第二个自定义参数即为转换规则,在编程中可将其设为一个函数或数组来决定数据如何被转义成字符串形式。当转换规则是数组时,则其中包含在该数组中的属性会被转换为字符串;而当转换规则是函数时,则该函数会遍历对象的所有属性,并将返回值赋值给对应的属性。
题4(Boolean)
下面输出的是:
const one = (false || {} || null)
const two = (null || false || '')
const three = ([] || 0 || true)
console.log(one, two, three)
代码解读
答案:{} “” []
这道题主要考察:
- js中仅存在六种假值: false, undefined, null, 0, ""(空字符串)和 NaN。
- 除了上述六种情况外的所有数值都被视为真值,在逻辑判断中当作true处理。
题6 (模版字符串)
下面输出的是:
function sayHi(name) {
return 'Hi there, ${name}`
}
console.log(sayHi())
代码解读
答案:Hi there, undefined
这道题主要考察:
- undefined和字符串拼接的时候,会加上undefined被打印
题8 (暂时性死区)
下面输出的是:
let name = 'Lydia'
function getName() {
console.log(name)
let name = 'Sarah'
}
getName()
代码解读
答案:ReferenceError
这道题主要考察:
使用let和const关键字声明的变量不具备提升行为,在这种情况下与var不同,在声明它们之前不会被初始化。这些未初始化的区域被称为"静态死区"(static hole),因为在尝试访问这些变量之前JavaScript将抛出ReferenceError错误。
题10 (yield)
下面输出的是
async function* range(start, end) {
for (let i = start, i <= end; i++) {
yield Promise.resolve(i);
}
}
(async () => {
const gen = range(1, 3);
for await(const item of gen) {
console.log(item);
}
}
代码解读
答案:1 2 3
这道题主要考察:
yield:yield 表达式被派发给另一个generator或可迭代对象。
通过range函数生成一个包含着Promise{1}、Promise{2}和Promise{3}的迭代器。
然后使用for await执行该迭代器以获取其异步结果。
这些resolve的结果依次是1、2、3。
今天的分享到此为止啦!如果你觉得这篇文章对你有帮助,请大家能够将文章分享出去并留下宝贵的评论和点赞呢~

