这些前端大厂面试题你会做吗?每日10题大厂面试题(三)

这篇博客汇总了7道前端大厂面试题,涉及块级作用域、扩展符、箭头函数、JSON.stringify、Boolean转换、模版字符串、暂时性死区和yield的用法。通过实例解析,帮助读者理解并掌握这些JavaScript关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题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 声明的变量是具有块级作用域的,块是大括号({})之间的任何东西,由于块级作用域,我们无法在声明的块之外引入变量
  • 这道题有个注意的是,因为是块级作用域,没有变量提升,调用未声明的变量并不会反悔undefined,而是报Reference错误
  • 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中的假值只有6个,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不同,并不会被初始化。在我们声明他们之前,无法访问,这称为“暂时性死区”, 在我们尝试声明变量之前访问变量时,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

       小伙伴们今天的学习就到这里了,如果觉得本文对你有帮助的话,欢迎转发,评论,收藏,点赞!!!
       每天学习进步一点点,就是领先的开始。如果想继续提高,欢迎关注我,或者关注公众号”祯民讲前端“。大量前端技术文章,面试资料,技巧等助你更进一步!
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值