Number 是对应数值的引用类型。要创建一个 Number 对象,就使用 Number 构造函数并传入一个 数值,如下例所示:

let numberObject = new Number(10);

与 Boolean 类型一样,Number 类型重写了 valueOf()、toLocaleString()和 toString()方 法。valueOf()方法返回 Number 对象表示的原始数值,另外两个方法返回数值字符串。toString() 方法可选地接收一个表示基数的参数,并返回相应基数形式的数值字符串,如下所示:

let num = 10;
    console.log(num.toString());   // "10"
    console.log(num.toString(2));  // "1010"
    console.log(num.toString(8));  // "12"
    console.log(num.toString(10)); // "10"
    console.log(num.toString(16)); // "a"

除了继承的方法,Number 类型还提供了几个用于将数值格式化为字符串的方法。 toFixed()方法返回包含指定小数点位数的数值字符串,如:

let num = 10;
    console.log(num.toFixed(2)); // "10.00"
这里的 toFixed()方法接收了参数 2,表示返回的数值字符串要包含两位小数。结果返回值为 "10.00",小数位填充了 0。
let num = 10.005;
    console.log(num.toFixed(2)); // "10.01"

toFixed()自动舍入的特点可以用于处理货币。不过要注意的是,多个浮点数值的数学计算不一定 得到精确的结果。比如,0.1 + 0.2 = 0.30000000000000004。

用于格式化数值的方法是 toExponential(),返回以科学记数法(也称为指数记数法)表 示的数值字符串。与 toFixed()一样,toExponential()也接收一个参数,表示结果中小数的位数。 来看下面的例子:

let num = 10;
    console.log(num.toExponential(1));  // "1.0e+1"

这段代码的输出为"1.0e+1"。一般来说,这么小的数不用表示为科学记数法形式。如果想得到数 值最适当的形式,那么可以使用 toPrecision()。 toPrecision()方法会根据情况返回最合理的输出结果,可能是固定长度,也可能是科学记数法 形式。这个方法接收一个参数,表示结果中数字的总位数(不包含指数)。来看几个例子:

let num = 99;
    console.log(num.toPrecision(1)); // "1e+2"
    console.log(num.toPrecision(2)); // "99"
    console.log(num.toPrecision(3)); // "99.0"

在这个例子中,首先要用 1 位数字表示数值 99,得到"1e+2",也就是 100。因为 99 不能只用 1 位 数字来精确表示,所以这个方法就将它舍入为 100,这样就可以只用 1 位数字(及其科学记数法形式) 来表示了。

用 2 位数字表示 99 得到"99",用 3 位数字则是"99.0"。本质上,toPrecision()方法会 根据数值和精度来决定调用 toFixed()还是 toExponential()。为了以正确的小数位精确表示数值, 这 3 个方法都会向上或向下舍入。