Appearance
数据类型与值语义: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 的真实转换规则。