编程必备:揭秘2021年大厂面试必考JS基础题(上)
2023-11-10 18:13:49
作为一名合格的程序员,扎实的JavaScript基础知识是必备技能之一。在2021年的各大厂面试中,JS基础题仍然占据着相当大的比重。为了帮助大家更好地备战面试,我们整理了以下几个经典问题,并进行了详细的解析。
1. ['1', '2', '3'].map(parseInt) what & why ?
console.log(['1', '2', '3'].map(parseInt));
// 输出:[1, NaN, NaN]
这个问题考察的是JavaScript中的数据类型转换和map()方法的使用。
parseInt()函数可以将字符串转换为整数。但是,如果字符串中包含非数字字符,则转换失败,并返回NaN。
map()方法可以对数组中的每个元素执行指定的函数,并返回一个新的数组。
因此,上面的代码会将数组中的每个字符串转换为整数,并返回一个新的数组。由于'2'和'3'都是有效的整数,因此它们被成功转换。但是,'1'前面有一个单引号,因此parseInt()函数无法将其转换为整数,并返回NaN。
2. typeof null是什么?为什么?
console.log(typeof null);
// 输出:"object"
这个问题考察的是JavaScript中的数据类型。
在JavaScript中,null是一个特殊的值,表示不存在的值。typeof运算符可以返回一个值的类型。
但是,null是一个例外。typeof null返回"object",而不是"null"。
这是因为在JavaScript的早期版本中,null被认为是一个对象。虽然在 późniejsze版本中,null被重新定义为一个基本类型,但typeof null仍然返回"object",以保持向后兼容性。
3. 实现函数防抖(防抖动)
function debounce(fn, delay) {
let timer = null;
return function () {
let context = this;
let args = arguments;
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
fn.apply(context, args);
timer = null;
}, delay);
};
}
这个问题考察的是JavaScript中的函数防抖技术。
函数防抖是一种优化技术,可以防止函数被频繁调用。它可以有效地提高程序的性能,并防止不必要的函数调用。
debounce()函数接受两个参数:fn和delay。fn是需要被防抖的函数,delay是防抖的延迟时间。
debounce()函数返回一个新的函数,该函数会在被调用后延迟delay毫秒执行fn函数。如果在delay毫秒内函数被再次调用,则会清除之前的延迟调用,并重新开始计时。
这可以有效地防止函数被频繁调用,并提高程序的性能。
4. 实现函数节流(限流)
function throttle(fn, delay) {
let lastTime = 0;
return function () {
let context = this;
let args = arguments;
let now = Date.now();
if (now - lastTime >= delay) {
fn.apply(context, args);
lastTime = now;
}
};
}
这个问题考察的是JavaScript中的函数节流技术。
函数节流也是一种优化技术,可以防止函数被频繁调用。它可以有效地控制函数的调用频率,并防止不必要的函数调用。
throttle()函数接受两个参数:fn和delay。fn是需要被节流的函数,delay是节流的延迟时间。
throttle()函数返回一个新的函数,该函数会在被调用后延迟delay毫秒执行fn函数。如果在delay毫秒内函数被再次调用,则会被忽略。
这可以有效地控制函数的调用频率,并防止函数被频繁调用。
5. 实现数组扁平化
function flatten(arr) {
return arr.reduce((acc, cur) => {
return acc.concat(Array.isArray(cur) ? flatten(cur) : cur);
}, []);
}
这个问题考察的是JavaScript中的数组扁平化技术。
数组扁平化是指将多维数组转换为一维数组。它可以有效地简化数组的操作,并提高程序的性能。
flatten()函数接受一个数组作为参数,并返回一个扁平化后的数组。
flatten()函数使用reduce()方法来遍历数组。对于每个元素,如果它是数组,则递归调用flatten()函数将其扁平化。否则,将元素添加到累加器acc中。
最后,返回累加器acc,即扁平化后的数组。