为什么 NaN 不等于自身?在实际代码中如何可靠判断一个值是否等于 NaN?
解释 NaN 不等于自身的 IEEE 754 语义,对比 Number.isNaN 与全局 isNaN 的区别,推荐可靠判断方法,并指出全局 isNaN 会进行类型转换的陷阱。
JavaScript面试题第 6 页,显示第 251–285 题,共找到 285 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
解释 NaN 不等于自身的 IEEE 754 语义,对比 Number.isNaN 与全局 isNaN 的区别,推荐可靠判断方法,并指出全局 isNaN 会进行类型转换的陷阱。
围绕“在什么操作下会得到 -0?它和 0 有哪些行为差异,尤其是在 Object.is 和 JSON.stringify ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕如 1/-0 得 -0,但乘除、除法中符号处理,指出 Object.is 区分而 === 不区分,JSON.stringif。
围绕“空值合并运算符 ?? 与逻辑或 || 在默认值选择上有何关键区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖明确 ?? 只在左侧是 null 或 undefined 时才返回右侧,而 || 对所有假值都返回右侧,并说明可读性。
围绕“Number 采用 IEEE 754 双精度格式,它如何存储符号位、指数和尾数?这对范围有多大影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖从概念阐述 1+11+52 位的结构、指数偏移,以及可表达的范围,但不做极详细的位级示例。
本文辨析全局 isFinite 与 Number.isFinite 的差异:前者强制类型转换,后者严格类型检查。通过字符串、null、undefined 等例子说明行为,并给出工程中的选择建议。
围绕“parseInt 在解析数字字符串时有哪些容易出错的细节,尤其是对前缀和非法字符的处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 parseInt 如何从左到右解析、遇到非数字字符停止、对 '0x' 前缀的八进制/十六进制支持,以及 radix 参数的重要。
围绕“当使用 Number()、parseInt、parseFloat 以及一元加将相同字符串转换为数字,结果哪些一致哪些”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要对比对空字符串、带空格、合法数字前后有字符等输入的处理差异,给出选择指导。
围绕“Number.prototype.toFixed 返回的是什么类型?处理大数字或小数时可能出现哪些偏差”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖指出返回字符串且可能因二进制浮点而出现舍入误差,例如 (1.005).toFixed(2) 的结果。
围绕“如何将十进制数转换为二进制、八进制或十六进制字符串?转换为其他进制时有哪些限制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 toString(radix) 的用法,注意 radix 范围及负数、浮点的处理。
围绕“为什么 JavaScript 中的 0.1 + 0.2 不等于 0.3?如何安全地进行浮点数比较”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 IEEE 754 双精度表示带来的二进制误差,难点在于比较时应使用epsilon 而不是直接相等。
围绕“Number 类型能表示的最小正数值是什么?为什么存在正零和负零”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答 Number.MIN_VALUE 约 5e-324,补充下溢为 0 及负零为特殊符号。
围绕“数字分隔符 _ 在 JavaScript 数值表示中有哪些限制?它能用在哪些类型的字面量里”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明自 ES2021 起可在数字字面量中用 _ 增强可读性,但不能前后或连续,也不能在字符串或变量名中使用。
讲解 Object.prototype.toString.call 的工作机制与返回标记,给出识别数组、日期、正则、null 等的通用封装方法,并说明 Symbol.toStringTag 伪造标签导致的失效边界及应对策略。
围绕“在将对象转换为字符串时,valueOf 和 toString 的调用顺序是怎样的?如何自定义对象的字符串化行为”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 ToPrimitive 规则,默认先 hint number 再 string 的调用顺序,及 Symbol.toPrimit。
围绕“赋值运算符与严格相等运算符之间存在怎样的优先级关系?这可能导致哪些误判”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明赋值优先级低于相等,示例 a = b == c 是赋值表达式,括号要写清楚,不全面列举优先级表。
围绕“一元加号 + 在类型转换中与 Number() 有何异同?常见的使用场景是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明两者对字符串、布尔、null、undefined 的转换结果一致,但 +'' 与 Number('') 的本质联系,并举例作为快。
解释 JavaScript 原始类型的自动装箱机制:属性访问时临时创建 String、Number 等包装对象并调用其原型方法,随后丢弃;并说明为何不该用 new 显式创建包装对象。
围绕“Object.is 与 === 在判断 -0、NaN 上有哪些差异?在什么场景下需要使用 Object.is”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须指出 Object.is 认为 -0 与 +0 不相等、而 === 相等,以及 NaN 判断为相等。
围绕“在字符串拼接中,字符串与数字、布尔等类型拼接时会遵循怎样的转换规则”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕当 operands 之一是字符串,则强制转为字符串拼接,否则可能数字加法,给出混合示例及陷阱。
围绕“在字符串中使用转义序列(如 \n 和 \u)时,如何嵌入 Unicode 字符?反斜杠本身如何表示”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖列出常见转义、Unicode 转义及其限制,如 \u{1F600} 支持码点,而 \u 必须四位数,也包括 \\ 转义。
围绕“在 JavaScript 中,字符串是原始类型,但为什么可以使用下标访问字符?这有什么需要注意的地方”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释字符串的类数组特性和不可变性,下标访问得到的仍是单字符字符串,且不能通过赋值修改。
围绕“字符串的 length 属性对包含表情符号或组合字符的中文字符串会得出怎样的结果?为什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 length 按 UTF-16 码元计,因此𝄞 等增补平面字符长度为 2,组合字符可能更多,不深入正规化或 grapheme。
围绕“为什么两个视觉相同但由不同的 Unicode 码点组成的字符串可能不相等?normalize 方法如何帮助”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕用 é 作为例子,指出 NFD 与 NFC 形式差异,并建议使用 normalize 比较,不深入 locale 比较。
围绕“字符串提取方法 slice、substring 和 substr 在处理负数和起始结束顺序时有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较参数差异、负数处理和行为的一致性,推荐使用 slice 及其理由。
围绕“String.prototype.valueOf 与 String.prototype.toString 有何区别?”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕两者返回原始字符串,构造函数不同,但实际值一样,说明包装对象的内部值获取。
围绕“在对象中,Symbol 作为属性键与字符串键有何不同?在哪些 API 中会被忽略”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕Symbol 键不可枚举且 Object.keys 忽略,但Object.getOwnPropertySymbols 获取,。
围绕“Symbol 作为基本类型有什么独特性质?为何 Symbol() !== Symbol() 且不能被 new”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 Symbol 用于唯一属性键,每次调用产生新值,以及要使用 Symbol.for 才能共享。
围绕“模板字符串相比普通字符串拼接有哪些额外的类型转换规则?在嵌套表达式中有哪些注意事项”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 `${expression}` 中的值转换为字符串的规则与 String() 相同,以及嵌套用法和可读性。
围绕“当一个对象包含值为 undefined、函数或 Symbol 的属性时,JSON.stringify 会如何转换”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明这些值在对象中被省略、在数组中被转为 null,单独转换时返回 undefined,并强调循环引用错误。
围绕“对象的 Symbol.toPrimitive 方法如何允许自定义对象在转换数字和字符串时的返回”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释它的优先级高于 valueOf/toString,如何根据 hint 返回字符串或数字,并举自定义 Date 或对象示例。
围绕“字符串的不可变性与数组的可变性在内存和操作上带来哪些本质差异?为什么字符串方法不像数组方法那样修改原地”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 String 方法返回新字符串,而数组方法可能原处修改,并指出因此字符串连接复杂化。
讲解 typeof 在哪些输入上返回 'object',包括普通对象、数组、日期、正则与包装对象,重点说明 typeof null 为 'object' 的历史原因,以及由此带来的判断缺陷和正确替代做法。
围绕“在 JavaScript 中,undefined 和 null 在类型、含义和典型使用场景上有哪些本质区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明两者在 typeof 结果、相等性、语义上的核心差异,并举例何时使用 null 表示空值、何时依赖 undefined。
围绕“Number.prototype.valueOf 返回什么类型的值?它如何影响自定义对象在类型转换中的行为”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕它返回原始数字,可用于覆盖对象内置转换,但通常更推荐 Symbol.toPrimitive,提供简单的对象转换示例。
围绕“void 运算符的作用是什么?为何常用来获取 undefined 或用于某些异步表达式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕void expression 返回 undefined,可用于执行表达式并忽略结果、获取安全 undefined,但指出如。