跳到主要内容

原始包装类型

原始值为什么能调用方法?​

  • 包装类型: Boolean、Number、String 是与三种原始值对应的引用类型;
  • 机制: 读取原始值时临时创建对应包装对象, 调用实例方法后立即销毁;
  • 生命周期: 引用类型实例在离开作用域前可继续引用, 包装对象只存在于当前读取表达式;
const name = "Nicholas";
name.age = 27;
console.log(name.age); // undefined; 临时对象已被销毁

如何显式创建包装对象, 为什么通常不推荐?​

  • 显式创建: new Boolean()、new Number()、new String(), 或 Object(arg) 按参数类型包装;
  • 陷阱: 包装对象恒为真值, new Boolean(false) 也参与逻辑运算为真;
  • 结论: 需要转换时使用 Boolean(v)、Number(v)、String(v) 调用而非 new;

Boolean 与 Number 有哪些常用 API?​

类型API
BooleanBoolean(value)、valueOf()、toString()
NumberNumber(value)、valueOf()、toString()、toFixed(digits)、toExponential()、toPrecision()
Number 静态Number.isInteger、Number.isSafeInteger、Number.isNaN、Number.isFinite、Number.parseInt、Number.parseFloat
  • 单选口径: Number.isNaN 只对真正的 NaN 返回 true, 全局 isNaN 会先做类型转换, 详见 Number 与 BigInt;
  • 取整口径: toFixed 保留小数位, toExponential 用科学计数法, toPrecision 按数值大小自动选择;
  • String 包装的 API 见 String;