- 八进制字面量与数值解析
console.log(018 - 015);
//5
知识点总结:八进制字面量(legacy octal)
- 非严格模式下,以 0 开头的数字可能按八进制解析。
- 018 中的 8 不属于八进制 → 按十进制解析为 18。
- 015 属于八进制 → 十进制解析为 13。
- 严格模式下会报错,不推荐使用 0 前缀数字。
- typeof 运算符的“返回值”
console.log(typeof typeof 1)
//string
知识点总结:typeof 永远返回字符串
typeof 1 返回 "number"。- 再执行
typeof "number" → "string"。 - typeof 的返回值始终是一个字符串。
- 0.1 + 0.2 !== 0.3
console.log(0.1 + 0.2 == 0.3)
//false
知识点总结:IEEE754 浮点数误差
- JS 采用 64 位浮点数格式,会产生精度误差。
- 0.1 + 0.2 实际结果是 0.30000000000000004。
- 判断浮点数相等应使用误差范围:
Math.abs(a - b) < Number.EPSILON。
- sort() 默认按字典序排序
const numbers = [33, 2, 8];
numbers.sort();
console.log(numbers[1])
//33
知识点总结:sort 默认按字典序排序
- sort() 未提供比较函数时,会将元素转为字符串再比较。
- 导致数字排序不符合预期,如 “2” < “33” < “8”。
- 若要按数值排序,应使用:
sort((a, b) => a - b)。
- == 的隐式转换规则
console.log(false == '0');
//true
知识点总结:抽象相等会触发强制类型转换
'0' 转为数字 → 0。false 转为数字 → 0。- 因此 false == ‘0’ → true。
- 实际开发建议使用
=== 避免隐式转换。
- 稀疏数组(Sparse Array)
let array = [1, 2, 3];
array[6] = 9;
console.log(array[5]);
//undefined
知识点总结:稀疏数组与 empty slot
- 给高索引赋值会创建空槽(empty slot)。
- 数组形态例如
[1, 2, 3, <3 empty slots>, 9]。 - 读取空槽结果为
undefined,但内部并未实际存储值。 - empty slot 与
undefined 有语义差异。
- NaN 的类型
console.log(typeof NaN);
//number
知识点总结:NaN 属于 number 类型
typeof NaN 结果为 "number",这是规范规定。- NaN 意味着“无法表示的数值计算结果”。
- 判断 NaN 必须使用
Number.isNaN(),不能用 ===。
- 香蕉梗 (banana trick)
console.log(('b' + 'a' + + 'a' + 'a').toLowerCase());
//'banana'
知识点总结:一元加号触发数字转换
+'a' 转换失败 → NaN。- 字符串拼接:“ba” + NaN → “baNaN”。
- toLowerCase() → “banana”。
- 体现了 JS 一元运算符的隐式类型转换行为。
- 对象在 == 中会做 ToPrimitive 转换
const isTrue = true == [];
const isFalse = true == ![];
console.log(isTrue + isFalse);
//0
知识点总结:对象在 == 中会进行 ToPrimitive 转换
[] 转为原始值 → "",再转数字 → 0。true 转数字 → 1。- 因此 true == [] → false。
![] 为 false,因此 true == false → false。- false + false → 0。
- 只有 6 个值是 falsy,其余全部 truthy。:false(布尔假),0(数字零),-0(负零), “”(空字符串),null(空指针),undefined(未定义),NaN(非数字)
- instanceof 只能识别“对象实例”
console.log("This is a string." instanceof String);
//false
知识点总结:instanceof 只适用于对象实例
- 字符串字面量
"abc" 属于原始类型,不是对象。 - 只有
new String("abc") 才是 String 的实例。 "abc" instanceof String → false。- 用 typeof 判断基本类型更可靠。