原始包装类型
原始值为什么能调用方法?
- 包装类型:
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 |
|---|---|
Boolean | Boolean(value)、valueOf()、toString() |
Number | Number(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;