前端 JavaScript 基础面试题, 为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端 JavaScript 基础面试题, 为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
QA
Step 1
Q:: 为什么 JavaScript 中 0.1 + 0.2 !== 0.3
,如何让其相等?
A:: JavaScript 中的浮点数是遵循 IEEE 754 标准的双精度 64 位二进制格式。这导致某些小数无法精确表示,比如 0.1 和 0.2 的二进制表示是无限循环的。因此,当进行算术运算时,结果会有微小的误差,导致 0.1 + 0.2 !== 0.3
。为了让其相等,可以使用 Number.EPSILON
或 toFixed()
方法进行比较:
console.log(Math.abs((0.1 + 0.2) - 0.3) < Number.EPSILON); // true
// 或者
console.log((0.1 + 0.2).toFixed(10) === 0.3.toFixed(10)); // true
Step 2
Q:: 什么是闭包?
A:: 闭包是指在 JavaScript 中,当一个函数访问它外部作用域的变量时,即使这个函数是在它的外部作用域之外执行的,也能访问这些变量。闭包是创建私有变量和函数的常用方法。
function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
Step 3
Q:: 什么是事件循环?
A:: 事件循环是 JavaScript 的运行机制,用于处理异步操作。当 JavaScript 代码执行时,单线程引擎会将任务放入调用栈,遇到异步操作时将其交给浏览器处理,完成后将回调函数放入任务队列。事件循环不断检查调用栈是否为空,如果为空则从任务队列中取出第一个任务执行。
console.log('Start');
setTimeout(() => {
console.log('Timeout');
}, 0);
console.log('End');
// 输出顺序: Start, End, Timeout
用途
这些内容都是 JavaScript 的基础知识,掌握这些知识有助于理解更复杂的概念和框架。在实际生产环境中,这些知识广泛应用于调试、性能优化、代码组织、异步编程等方面。\n相关问题
🦆
如何处理 JavaScript 中的异步编程?▷
🦆
解释 JavaScript 中的作用域和作用域链.▷
🦆
解释 JavaScript 中的原型和原型链.▷