7 个 JavaScript 常见陷阱:你真的懂吗?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
问题1问题:0.1 + 0.2 === 0.3 的结果是什么?
答案: 结果是 false。 解释: JavaScript 中的小数(也就是浮点数)并不是总能精确表示。由于浮点数在计算机中的存储方式,0.1 + 0.2 实际的结果并不是我们期望的 0.3,而是 0.30000000000000004。所以当你做比较时,结果是 false。这主要是因为二进制系统无法完全精确表示某些十进制小数。 问题2问题:
答案:
解释:
问题3问题:typeof null 的结果是什么?
答案: 结果是 "object"。 解释: 这是 JavaScript 中一个有趣且常见的现象。null 实际上表示“没有值”或“空”,但是 typeof null 的结果是 "object"。这是 JavaScript 早期设计中的一个 bug,虽然已经知道问题,但为了兼容旧代码一直没有修复。 问题4问题:什么是闭包?它是如何工作的?
答案: 输出结果是:
解释: 闭包指的是一个函数可以记住它所在的环境(变量),即使这个函数被外部调用,它仍然能访问定义时的作用域。上面的例子中,closure 是 outerFunction 的内部函数,它可以访问 count 变量,每次调用 closure() 时都会递增并打印 count 的值。这样通过闭包,我们可以让函数保持对外部变量的引用。 问题5问题:true + false 和 [] + {} 的结果分别是什么?
答案:
解释:
问题6问题:[] == ![] 的结果是什么?
答案: 结果是 true。 解释: 这个表达式比较复杂,但可以一步步拆解:
问题7问题:以下代码中 console.log(a) 的输出是什么?
答案: 输出是 undefined。 解释: 这是因为 JavaScript 的变量提升机制。在执行代码前,JavaScript 会将变量声明提升到作用域的最上方,但不会提升赋值部分。所以上面的代码实际上等同于:
因此,当执行 console.log(a) 时,变量 a 已经声明,但还没有被赋值,所以结果是 undefined。 结论这些问题展示了 JavaScript 中常见的“坑”,包括浮点数的精度问题、隐式类型转换、闭包的工作原理、以及变量提升等概念。理解这些内容可以帮助你更好地编写代码,避免常见的错误。
该文章在 2024/10/14 12:32:23 编辑过 |
关键字查询
相关文章
正在查询... |