1. 简介

为了便于操作基本类型,ECMAScript 提供了 3 种特殊的引用类型:BooleanNumberString。与其他引用类型相似,但同时也具有与各自基本类型相应的特殊行为。

实际上,每当读取一个基本类型的时候,后台就会创建一个对应的基本包装类型的对象。

当访问到基本类型时,访问过程出于一种读取模式,也就是从内存中读取值。而在读取模式中访问字符串时,后台都会自动完成下列处理:

  • 创建 String 类型的一个实例

  • 在实例上调用指定的方法

  • 销毁这个实例

经过处理后,基本的字符串就变成跟对象一样了。

引用类型和基本包装类型的主要区别在于对象的生存期。

  • 引用类型在执行流离开当前作用域之前都一直保存在内存中

  • 自动创建的基本包装类型的对象,则只存在与一行代码的执行瞬间,然后立即销毁。意味着我们不能在运行时为基本类型值添加属性和方法。

对基本包装类型的实例调用 typeof 会返回 object,而且所有基本包装类型的对象都会被转换为布尔值 true

2. Boolean 类型

Boolean 类型是与布尔值对应的引用类型,要创建 Boolean 对象,可以调用 Boolean 构造函数并传入 truefalse 值。

  1. var booleanObject = new Boolean(true);

Boolean 类型重写了 valueOf() 方法,返回基本类型值 truefalse,重写了 toString() 方法,返回字符串 "true""false"

常见问题,在布尔表达式中使用 Boolean 对象

  1. var falseObject = new Boolean(false); // 是一个对象
  2. var result = falseObject && true;
  3. alert(result); //true
  4. var falseValue = false; // 是一个布尔类型
  5. result = falseValue && true;
  6. alert(result); //false

布尔表达式中,所有对象都会被转换为 true

基本类型和引用类型的布尔值的其他两个区别:

  • typeof 操作符,基本类型返回 boolean,引用类型返回 object

  • 引用类型使用 instanceof 操作符测试 Boolean 对象返回 true,基本类型返回 false

建议永远不要使用 Boolean 对象

3. Number 类型

是与数字值对应的引用类型。创建 Number 对象,可以调用 Number 构造函数向其中传递相应的数值。

  1. var numberObject = new Number(10);

重写了 valueOf() toString() toLocaleString()方法

  • valueOf() 方法返回对象表示的基本类型值

  • toString() toLocaleString() 返回字符串形式的数值

3.1 toFixed()

用于将数值转化为字符串的方法 toFixed(),会按照指定的小数位返回数值的字符串表示

  1. var num = 10;
  2. alert(num.toFixed(2)); //10.00
  3. var num = 10.005
  4. alert(num.toFixed(2)); //10.01

如果数值本身包含的小数位比指定的多,那么接近指定的最大小数位的值就会舍入

可以表示带有 0 到 20 个小数位的数值,有些浏览器还支持更多位数,适合处理货币值

3.2 toExponential()

返回指数表示法(也称 e 表示法)表示的数值的字符串形式。

接受一个参数,指定输出结果中的小数位数。

  1. var num = 10;
  2. alert(num.toExponential(1)); // "1.0e+1"

4. String 类型

这个类型在 JavaScript 中非常重要,内置方法等也比较多,所以放置在独立章节中。