【JS】内置对象 Number 详解

一、静态属性

属性描述
Number.EPSILON表示 1 与Number可表示的大于 1 的最小的浮点数之间的差值
Number.MAX_SAFE_INTEGER常量表示在 JavaScript 中最大的安全整数(2^53 - 1)
Number.MAX_VALUE表示在 JavaScript 里所能表示的最大数值
Number.MIN_SAFE_INTEGER代表在 JavaScript 中最小的安全的 integer 型数字 (-(2^53 - 1))
Number.MIN_VALUE表示在 JavaScript 中所能表示的最小的正值
Number.NaN表示“非数字”(Not-A-Number)。和 NaN 相同
Number.NEGATIVE_INFINITY表示负无穷大
Number.POSITIVE_INFINITY表示正无穷大

二、静态方法

2.1、转整数:Number.parseInt()

这个方法和全局的 parseInt() 函数具有相同的功能:Number.parseInt === parseInt;

  • Number.parseInt()方法可以在字符串转换成数字的时候把字符串当成多少进制转成十进制

  • 语法:Number.parseInt(要转换的字符串,当做几进制来转换)

  • 参数:第二个参数提供2~36之间的数字表示所保存数字的进制数,并且是可选的

  • 示例 1:

var str = 100
console.log(Number.parseInt(str, 8)) // 64 把 100 当作一个 八进制 的数字转换成 十进制 以后得到的
console.log(Number.parseInt(str, 16)) // 256 把 100 当作 十六进制 的数字转换成 十进制 以后得到的
console.log(Number.parseInt(str, 2)) // 4 把 100 当作 二进制 的数字转换成 十进制 以后得到的
  • 示例 2:
var num1 = "123abc";
var num2 = "abc123";
document.write("使用parseInt()函数:<br>");
document.write("123abc转换结果为:"+Number.parseInt(num1)+"<br>");
document.write("abc123转换结果为:"+Number.parseInt(num2)+"<br>");
//从字串符下标0开始转换,把数字型的字符转换为整形
//当遇到非数字型字符即终止转换,并输出NaN,NaN表示非数字类型

// 运行结果:
/*
使用parseInt()函数:
123abc转换结果为:123
abc123转换结果为:NaN
*/

2.2、转小数:Number.parseFloat()

这个方法和全局的 parseInt() 函数具有相同的功能:Number.parseFloat === parseFloat;

  • Number.parseFloat() :解析一个参数(必要时先转换为字符串)并返回一个浮点数

  • 语法:Number.parseFloat(string)

  • 示例 1:

var num3 = "123.456abc";
var num4 = "abc123.456";
document.write("使用parseFloat()函数:<br>");
document.write(num3+"转换结果为:"+Number.parseFloat(num3));
document.write(num4+"转换结果为:"+Number.parseFloat(num4));
// 运行结果:
/*
使用parseFloat()函数:
123.456abc转换结果为:123.456
abc123.456转换结果为:NaN
*/
  • 示例 2:下面的例子都返回3.14
Number.parseFloat(3.14);
Number.parseFloat('3.14');
Number.parseFloat('  3.14  ');
Number.parseFloat('314e-2');
Number.parseFloat('0.0314E+2');
Number.parseFloat('3.14some non-digit characters');
Number.parseFloat({ toString: function() { return "3.14" } });

2.3、是否为数字:Number.isNaN()

Number.isNaN() 和全局 isNaN() 之间的区别:Number.isNaN() 不会尝试将参数转换为数字,因此非数字总是返回 false。

  • Number.isNaN():用来确定一个值是否为NaN(非数字类型),是则返回true,不是返回false
  • 语法:Number.isNaN(value)
  • 示例 1:基本用法
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0); // true
Number.isNaN(37); // false
  • 示例 2:两者区别
isNaN("NaN"); 				// true
isNaN(undefined); 			// true
isNaN({}); 					// true
isNaN("blabla"); 			// true
isNaN(true); 				// false,强制转换为 1
isNaN(null); 				// false,强制转换为 0
isNaN("37"); 				// false,强制转换为 37
isNaN("37.37"); 			// false,强制转换为 37.37
isNaN(""); 					// false,强制转换为 0
isNaN(" "); 				// false,强制转换为 0
------------------------------------------------------------------
Number.isNaN("NaN");		// false
Number.isNaN(undefined);	// false
Number.isNaN({});			// false
Number.isNaN("blabla");		// false
Number.isNaN(true);			// false
Number.isNaN(null);			// false
Number.isNaN("37");			// false
Number.isNaN("37.37");		// false
Number.isNaN("");			// false
Number.isNaN(" ");			// false

2.4、是否有限值:Number.isFinite()

Number.isFinite() 和全局 isFinite() 之间的不同:Number.isFinite不会先将参数转换为数字,这意味着只有类型为数字且为有限数的值才返回 true,而非数字的值始终返回 false。

  • Number.isFinite():用来确定一个值是否为有限数值,是则返回true,不是返回falseNaN返回true

  • 语法:Number.isFinite(value)
    语法格式:

  • 示例 1:基本用法

Number.isFinite(Infinity); // false
Number.isFinite(NaN); // false
Number.isFinite(-Infinity); // false

Number.isFinite(0); // true
Number.isFinite(2e64); // true
  • 示例 2:二者区别
isFinite("0"); // true;强制转换为数字 0
Number.isFinite("0"); // false
isFinite(null); // true;强制转换为数字 0
Number.isFinite(null); // false

2.5、是否为整数:Number.isInteger()

  • Number.isInteger():判断传入值是否为整数,是则返回true,不是返回false
  • 语法:Number.isInteger(value)
Number.isInteger(0); // true
Number.isInteger(1); // true
Number.isInteger(-100000); // true
Number.isInteger(99999999999999999999999); // true

Number.isInteger(0.1); // false
Number.isInteger(Math.PI); // false

Number.isInteger(NaN); // false
Number.isInteger(Infinity); // false
Number.isInteger(-Infinity); // false
Number.isInteger("10"); // false
Number.isInteger(true); // false
Number.isInteger(false); // false
Number.isInteger([1]); // false

Number.isInteger(5.0); // true
Number.isInteger(5.000000000000001); // false
Number.isInteger(5.0000000000000001); // true,因为精度损失
Number.isInteger(4500000000000000.1); // true,因为精度损失

三、原型方法

整数无法直接使用下列方法,因为整数会使点号被解释为一个小数点,导致抛错:Uncaught SyntaxError: Invalid or unexpected token

  • 解决方法:
123.toString()	// Uncaught SyntaxError: Invalid or unexpected token
123	.toString()	// '123'(多加个空格)
123..toString()	// '123'(多加个点)
(123).toString()// '123'(括号包裹)
var num = 123;
num.toString()	// '123'(变量形式)

3.1、指定精度:toPrecision()

  • toPrecision():以指定的精度返回该数值对象的字符串表示。
  • 语法:
`【参数】:
	precision: 可选,一个用来指定有效数个数的整数(范围:1-100)。
`
numObj.toPrecision(precision)
`【返回值】:
	四舍六入后的字符串(五看情况)。
`
  • 示例:
let numObj = 5.21

console.log(numObj.toPrecision())    // 输出 '5.21'
console.log(numObj.toPrecision(1))   // 输出 '5'
console.log(numObj.toPrecision(2))   // 输出 '5.2'
console.log(numObj.toPrecision(3))   // 输出 '5.21'
console.log(numObj.toPrecision(4))   // 输出 '5.210'


// 为 5 的情况
console.log((1.45).toPrecision(2))   // 输出 '1.4'
console.log((1.55).toPrecision(2))   // 输出 '1.6'

// 指定范围大了,数值会有所偏移,以下是 chore 测试的结果
console.log((1.2).toPrecision(17))   // 输出 '1.2000000000000000'
console.log((1.2).toPrecision(18))   // 输出 '1.19999999999999996'

3.2、保留小数:toFixed()

  • toFixed():以指定的精度返回该数值对象的字符串表示。
  • 语法:
`【参数】:
	digits: 可选,小数点后数字的个数(范围:0-20)。
`
numObj.toFixed(digits)
`【返回值】:
	四舍六入后的字符串(五看情况)。
`
  • 示例:
var numObj = 5.64;

numObj.toFixed();         // 返回 '6'
numObj.toFixed(1);        // 返回 '5.6'
numObj.toFixed(2);        // 返回 '5.64'
numObj.toFixed(3);        // 返回 '5.640' (多余的用 0 填充)

// 为 5 的情况
2.35.toFixed(1)           // 返回 '2.4'. (这里是向上舍入)
2.55.toFixed(1)           // 返回 '2.5'. (这里是向下舍入)

// 为 负数 的情况
-2.34.toFixed(1);         // 返回 -2.3(由于操作符优先级,负数不会返回字符串)
(-2.34).toFixed(1);       // 返回 "-2.3"(若用括号提高优先级,则返回字符串)

// 指定范围大了,数值会有所偏移,以下是 chore 测试的结果
console.log((1.2).toFixed(16))   // 输出 '1.2000000000000000'
console.log((1.2).toFixed(17))   // 输出 '1.19999999999999996'

3.3、转成指数:toExponential()

  • toExponential():以指数表示法返回该数值字符串表示形式。
  • 语法:
`【参数】: 
	fractionDigits:可选。一个整数,用来指定小数点后有几位数字。
`
numObj.toExponential(fractionDigits)
`【返回值】: 
	一个用幂的形式 (科学记数法) 来表示Number 对象的字符串。
	小数点后以 fractionDigits 提供的值来四舍五入。
	如果 fractionDigits 参数被忽略了,小数点后的将尽可能用最多的位数来表示该数值。。
`
  • 示例:
console.log(77.1234.toExponential())   	// 输出 7.71234e+1
console.log(77.1234.toExponential(2))   // 输出 7.71e+1
console.log(77.1234.toExponential(4))   // 输出 7.7123e+1

3.4、转换进制:toString()

  • toString():返回指定进制 Number 对象的字符串表示形式
  • 语法:
`【参数】: 
	radix:可选。
	       指定要用于数字到字符串的转换的基数 (从 2 到 36)。
	       如果未指定 radix 参数,则默认值为 10。
`
numObj.toString([radix])
`【返回值】: 
	字符串
`
  • 示例:
console.log(77.1234.toExponential())   	// 输出 7.71234e+1
console.log(77.1234.toExponential(2))   // 输出 7.71e+1
console.log(77.1234.toExponential(4))   // 输出 7.7123e+1

3.5、原始的值 valueOf()

该方法通常是由 JavaScript 引擎在内部隐式调用的,而不是由用户在代码中显式调用的,基本用不到。

  • valueOf():返回一个被 Number 对象包装的原始值
  • 语法:
`【参数】: 
	无
`
numObj.valueOf()
`【返回值】: 
	表示指定 Number 对象的原始值的数字
`
  • 示例:
var numObj = new Number(10);
console.log(typeof numObj); // object

var num = numObj.valueOf();
console.log(num);           // 10
console.log(typeof num);    // number

四、扩展方法(toLocaleString)

具体语法参考:MDN_toLocaleString()

4.1、数字转千分位格式

let num = 123456789; 
num.toLocaleString('en-US')			// '123,456,789'
12345.34.toLocaleString('en-US')	// '12,345.34'

2.2、数字转中文格式

(123456789).toLocaleString('zh-Hans-CN-u-nu-hanidec')	// '一二三,四五六,七八九'
(0123456789).toLocaleString('zh-Hans-CN-u-nu-hanidec')	// '一二三,四五六,七八九'
(1234567890).toLocaleString('zh-Hans-CN-u-nu-hanidec')	// '一,二三四,五六七,八九〇'
(12345670089).toLocaleString('zh-Hans-CN-u-nu-hanidec')	// '一二,三四五,六七〇,〇八九'
(1234567.890).toLocaleString('zh-Hans-CN-u-nu-hanidec')	// '一,二三四,五六七.八九'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗不甘坠落的流星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值