Number 对象

在JavaScript中,Number类型用于表示数值。JavaScript的Number类型遵循IEEE 754双精度浮点数格式,可以表示极大范围内的数值,包括正数、负数、零、无穷大(Infinity)和负无穷大(-Infinity),以及特殊的NaN(Not a Number)值。

以下是一些关于JavaScript中Number类型的关键点:

数值字面量

数值可以直接以字面量的形式表示,例如:

let num1 = 42; // 整数  
let num2 = 3.14159; // 浮点数  
let num3 = 0.1e2; // 科学计数法,等于 10  
let num4 = -99; // 负数

特殊数值
无穷大(Infinity):当一个数值太大,超出了JavaScript可以表示的范围时,会返回Infinity。
负无穷大(-Infinity):当一个数值太小,超出了JavaScript可以表示的范围时,会返回-Infinity。
非数字(NaN):表示一个非法的或不可表示的值。例如,0 / 0会返回NaN。
判断特殊数值
可以使用isFinite(), isNaN(), isInfinity()等全局函数来判断一个数值是否为有限数、非数字或无穷大。

console.log(isFinite(Infinity)); // false  
console.log(isNaN("hello")); // true  
console.log(isInfinity(1 / 0)); // true

数值运算
JavaScript提供了丰富的数值运算操作符,如加(+)、减(-)、乘(*)、除(/)、取模(%)等。

let sum = 5 + 3; // 8  
let diff = 10 - 4; // 6  
let product = 2 * 3; // 6  
let quotient = 10 / 3; // 3.3333333333333335  
let remainder = 10 % 3; // 1

数值方法
Number对象也提供了一些静态方法和实例方法,用于处理数值。例如:

Number.parseInt() 和 Number.parseFloat() 用于将字符串解析为整数或浮点数。
toFixed(), toExponential(), toPrecision()等方法用于格式化数值为字符串。

let num = 123.456;  
  
console.log(num.toFixed(2)); // "123.46"  
console.log(num.toExponential(2)); // "1.23e+2"  
console.log(num.toPrecision(4)); // "123.5"

Number对象与原始值
尽管JavaScript中经常将Number对象与原始数值混用,但它们之间是有区别的。当你使用new关键字创建一个Number对象时,你得到的是一个对象,而不是原始数值。

let numObj = new Number(123); // 创建一个Number对象  
let numPrim = 123; // 原始数值  
  
console.log(typeof numObj); // "object"  
console.log(typeof numPrim); // "number"

通常,推荐使用原始数值而不是Number对象,因为原始数值在性能和内存使用上更加高效。

数值范围
JavaScript能表示的数值范围是有限的。Number.MAX_VALUE 和 Number.MIN_VALUE 分别表示JavaScript可以表示的最大和最小正数(不包括Infinity)。而能表示的最小的负数则是 -Number.MAX_VALUE。

复习JavaScript的Number类型时,还需要注意浮点数的精度问题,因为二进制浮点数不能精确地表示所有的十进制小数。这可能会导致一些意外的舍入错误。

Number 对象

Number对象是数值对应的包装对象,可以作为构造函数使用,也可以作为工具函数使用。

作为构造函数时,它用于生成值为数值的对象。

var n = new Number(2);
typeof n // "object"

上面代码中,Number对象作为构造函数使用,返回一个值为2的对象。

作为工具函数时,它可以将任何类型的值转为数值。


Number(true) // 1

静态属性

Number对象拥有以下一些静态属性(即直接定义在Number对象上的属性,而不是定义在实例上的属性)。

  • Number.POSITIVE_INFINITY:正的无限,指向nfinity
  • Number.NEGATIVE_INFINITY:负的无限,指向-Infinity
  • Number.NaN:表示非数值,指向NaN
  • Number.MIN_VALUE:表示最小的正数(即最接近0的正数,在64位浮点数体系中为5e-324),相应的,最接近0的负数为-Number.MIN_VALUE
  • Number.MAX_SAFE_INTEGER:表示能够精确表示的最大整数,即9007199254740991
  • Number.MIN_SAFE_INTEGER:表示能够精确表示的最小整数,即-9007199254740991
Number.POSITIVE_INFINITY // Infinity
Number.NEGATIVE_INFINITY // -Infinity
Number.NaN // NaN

Number.MAX_VALUE
// 1.7976931348623157e+308
Number.MAX_VALUE < Infinity
// true

Number.MIN_VALUE
// 5e-324
Number.MIN_VALUE > 0
// true

Number.MAX_SAFE_INTEGER // 9007199254740991
Number.MIN_SAFE_INTEGER // -9007199254740991

实例方法

Number对象有4个实例方法,都跟将数值转换成指定格式有关。

Number.prototype.toString()

Number对象部署了自己的toString方法,用来将一个数值转为字符串形式。

(10).toString() // "10"

toString方法可以接受一个参数,表示输出的进制。如果省略这个参数,默认将数值先转为十进制,再输出字符串;否则,就根据参数指定的进制,将一个数字转化成某个进制的字符串。

(10).toString(2) // "1010"
(10).toString(8) // "12"
(10).toString(16) // "a"

上面代码中,10一定要放在括号里,这样表明后面的点表示调用对象属性。如果不加括号,这个点会被 JavaScript 引擎解释成小数点,从而报错。

10.toString(2)
// SyntaxError: Unexpected token ILLEGAL

通过方括号运算符也可以调用toString方法。

10['toString'](2) // "1010"

- toString方法只能将十进制的数,转为其他进制的字符串。如果要将其他进制的数,转回十进制,需要使用parseInt方法。

Number.prototype.toFixed()

toFixed()方法先将一个数转为指定位数的小数,然后返回这个小数对应的字符串。

Number(10).toFixed(2) // "10.00"
Number(10.005).toFixed(2) // "10.01"

toFixed()方法的参数为小数位数,有效范围为0到100,超出这个范围将抛出 RangeError 错误。

Number.prototype.toExponential()

toExponential() 是JavaScript中 Number 类型的一个方法,它用于将数字转换为指数形式的字符串表示。这个方法返回一个字符串,该字符串表示的是调用它的数字对象的指数表示形式。

这里的 fractionDigits 是一个可选参数,它表示小数点后要显示的位数。这个参数的值应该在0到20之间(包括0和20),尽管某些JavaScript实现可能支持更大或更小的范围。如果省略了这个参数,那么 toExponential() 方法会使用尽可能多的数字来表示。

返回的字符串将遵循以下格式:一个小数点前有一位数字,小数点后有 fractionDigits 位数字(如果提供了该参数的话)。这个数字的小数部分会被舍入,如果需要的话,会用0来补足以达到指定的长度。

(10).toExponential()  // "1e+1"
var num = 2.13456;  
console.log(num.toExponential()); // 输出可能是 "2.13456e+0"  
  
var num2 = 212.13456;  
console.log(num2.toExponential()); // 输出可能是 "2.1213456e+2"  
  
var num3 = 2.13456;  
console.log(num3.toExponential(3)); // 输出可能是 "2.135e+0"

需要注意的是,如果传递给 toExponential() 的对象不是一个数字,或者 fractionDigits 参数的值不在有效范围内,那么方法会抛出异常。

toExponential() 方法在需要将数字以紧凑的指数形式表示时非常有用,特别是在处理非常大或非常小的数字时。它返回的字符串表示形式可以很容易地用于显示或存储数字,尤其是在科学计算或金融应用中。

Number.prototype.toPrecision()

Number.prototype.toPrecision()方法用于将一个数转为指定位数的有效数字。

(12.34).toPrecision(1) // "1e+1"
(12.34).toPrecision(2) // "12"
(12.34).toPrecision(3) // "12.3"
(12.34).toPrecision(4) // "12.34"
(12.34).toPrecision(5) // "12.340"

该方法的参数为有效数字的位数,范围是1到100,超出这个范围会抛出 RangeError 错误。

该方法用于四舍五入时不太可靠,跟浮点数不是精确储存有关。

Number.prototype.toFixed()

  • toFixed() 方法将字符串四舍五入为指定的小数位数。

注释:如果小数位数高于数字,则添加零。

function financial(x) {
  return Number.parseFloat(x).toFixed(2);
}

console.log(financial(123.456));
// expected output: "123.46"

console.log(financial(0.004));
// expected output: "0.00"

console.log(financial('1.23e+5'));
// expected output: "123000.00"

语法

numObj.toFixed(digits)

digits
小数点后数字的个数;介于 0 到 20(包括)之间,实现环境可能支持更大范围。如果忽略该参数,则默认为 0。

返回值

使用定点表示法表示给定数字的字符串。

Number.parseInt()

语法 方法将值解析为字符串并返回第一个整数。

Number.parseInt(string)
Number.parseInt(string, radix)
document.getElementById("demo").innerHTML =
Number.parseInt("10") + "<br>" +
Number.parseInt("10.00") + "<br>" +
Number.parseInt("10.33") + "<br>" +
Number.parseInt("34 45 66") + "<br>" +
Number.parseInt("   60   ") + "<br>" +
Number.parseInt("40 years") + "<br>" +
Number.parseInt("He was 40");


//10
//10
//10
//34
//60
//40
//NaN

参数

string

  • 要被解析的值。如果参数不是一个字符串,则将其强制转化为字符串。字符串开头的空白符将会被忽略。

radix 可选

  • 从 2 到 36 的整数,表示进制的基数。如果超出这个范围,将返回 NaN。假如 radix 未指定或者为 0,除非数字以 0x 或 0X 开头(此时假定为十六进制 16),否则假定为 10(十进制)。

返回值

  • 从给定的字符串中解析出的一个整数。

  • 如果基数小于 2 或大于 36,或第一个非空白字符不能转换为数字,则返回 NaN。

Number.parseInt 与 parseInt

这个方法和全局的 parseInt() 函数具有一样的函数功能:

Number.parseInt === parseInt // true

Number.parseFloat()

  • Number.parseFloat() 方法可以把一个字符串解析成浮点数。该方法与全局的 parseFloat() 函数相同,并且处于 ECMAScript 6 规范中(用于全局变量的模块化)。

语法
Number.parseFloat(string)

参数
string

这里有一个简单的例子来说明如何使用 parseFloat()

const str = "123.45";
const num = parseFloat(str);
console.log(num); // 输出: 123.45

在这个例子中,字符串 "123.45"parseFloat() 函数解析为一个浮点数 123.45

需要注意的是,parseFloat() 会从字符串的开头开始解析,直到遇到第一个不能解析为数字的字符为止。例如:

const strWithText = "123.45abc";
const num = parseFloat(strWithText);
console.log(num); // 输出: 123.45

在这个例子中,尽管字符串 "123.45abc" 后面有非数字字符,但 parseFloat() 仍然能够正确解析出前面的数字部分 123.45

此外,如果字符串无法被解析为一个有效的数字(或者字符串为空),parseFloat() 会返回 NaN(不是一个数字)。

const notANumber = parseFloat("abc");
console.log(notANumber); // 输出: NaN

const emptyString = parseFloat("");
console.log(emptyString); // 输出: NaN

虽然 Number.parseFloat() 和全局的 parseFloat() 功能相同,但使用全局的 parseFloat() 通常更为常见和简洁。不过,使用 Number.parseFloat() 在某些情况下可能会更清晰地表达你的意图,尤其是当你想强调你正在使用 Number 对象的某个方法时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值