Skip to content

数据类型与值语义:primitive、reference 与隐式转换

主题边界

  • JavaScript 的坑大多来自值语义误判:引用共享、truthy/falsy、隐式转换路径。
  • 真正要理解的是 primitive、对象引用和比较规则怎样影响运行时行为。

机制与流程

  • primitive 包括 string、number、bigint、boolean、symbol、undefined、null;对象用于承载可变属性集合与原型关联。
  • 对象赋值复制的是引用绑定,而不是整棵对象树本身。
  • 抽象相等比较、数值运算和字符串拼接会触发 ToPrimitive、ToNumber、ToString 等隐式转换。

关键差异

  • null 表示刻意的空值,undefined 更接近缺失或未初始化;二者语义和历史行为不同。
  • Object.is===== 的比较规则不同,NaN-0 和装箱对象是常见分界点。

边界条件

  • 说“null 是 object”只是在描述历史遗留的 typeof 结果,不代表它具有对象行为。
  • 隐式转换并非一定错误,但必须知道触发路径,尤其是字符串和数值混用时。

工程落点

  • 接口入参、表单处理和状态存储中应尽量显式归一化类型,减少运行时猜测。
  • TypeScript 只能约束静态类型,运行时仍然遵循 JavaScript 的真实转换规则。

相关主题