返回

轻松破解前端面试难题,五道必备题秒答!

前端

剖析 5 道前端面试难题,助你称霸面试

作为一名前端开发者,在面试中展现出对 JavaScript 的深入理解至关重要。为了帮助你做好准备,我们深入探讨了 5 道常见的面试难题,这些难题会让你的大脑运转起来。

1. 浮点数谜团:为什么 0.1 + 0.2 不等于 0.3?

计算机使用二进制存储浮点数,这就像用乐高积木搭建筑物。就像积木不可能完美复制某些形状一样,二进制也难以精确表示一些十进制小数。因此,当计算机尝试将 0.1 和 0.2 相加时,它无法得到完美的 0.3,而只能得到一个非常接近的近似值。

2. 安全的 undefined:如何避免陷阱?

undefined 是 JavaScript 中一个特殊值,表示未赋值的变量。但直接使用它作为变量名可能会很危险,因为它也是一个全局变量,可能会被其他代码覆盖。为了避免这个陷阱,我们可以使用 typeof 运算符获取一个安全的 undefined 值:

const safeUndefined = typeof undefined; // "undefined"

3. NaN 的秘密:typeof 和 Number.isNaN 的区别

NaN(非数字值)在 JavaScript 中是一个特殊值。使用 typeof 运算符检查 NaN 时,它会返回 "number",因为 NaN 虽然不是数字,但属于 Number 类型。然而,Number.isNaN 函数更严格,它只将真正的 NaN 值识别为 NaN:

console.log(typeof NaN); // "number"
console.log(Number.isNaN('foo')); // false

4. 隐式转换的魔力:如何将字符串变成数字?

JavaScript 有一个内置的机制,可以自动将某些值(如字符串、布尔值甚至对象)转换为数字。这有时很方便,但有时也会导致意外结果:

console.log('1' + 2); // "12"
console.log(true + 2); // 3

5. 异步编程:了解 promise 的魔力

promise 是 JavaScript 中处理异步操作的强大工具。它们类似于诺言,当操作完成时,它们要么兑现(成功),要么违背(失败)。使用 promise 可以编写更清晰、更可控的异步代码:

const myPromise = new Promise((resolve, reject) => {
  setTimeout(() => resolve('成功!'), 1000);
});

myPromise.then(result => console.log(result)); // "成功!"

掌握这些知识,自信应战

通过理解这些前端面试难题,你已经掌握了 JavaScript 的一些关键概念。这些知识不仅能帮助你在面试中脱颖而出,还能让你在实际开发中写出更健壮的代码。

常见问题解答

Q1:typeof null 的结果是什么?
A1:"object",即使 null 在技术上不是一个对象。

Q2:NaN 等于 NaN 吗?
A2:否,NaN 不等于它自己,因为 NaN 并不真正等于任何东西。

Q3:可以在 promise 中使用 try/catch 吗?
A3:是的,可以在 promise 的 .then() 回调函数中使用 try/catch 来处理错误。

Q4:如何检测数组是否为空?
A4:可以使用 Array.length === 0arr.length < 1

Q5:事件冒泡和捕获之间的区别是什么?
A5:事件冒泡是事件从目标元素向上传播,而事件捕获是事件从文档的根元素向下传播。