JavaScript Number研究01:基本介绍与常用方法详解
在JavaScript中,Number
对象是用于表示和操作数值的核心对象之一。它既可以表示整数,也可以表示浮点数。本文将深入研究Number
对象的基本概念,以及常用的构造函数和方法,包括Number()
构造函数、isFinite
、isInteger
、isNaN
、isSafeInteger
、parseInt
和parseFloat
等。
一、Number对象的基本介绍
1. 数值类型
JavaScript中只有一种数字类型,即64位浮点数(遵循IEEE 754标准)。这意味着所有的数字,无论是整数还是小数,都是以浮点数的形式存储。
const intNum = 42; // 整数
const floatNum = 3.14; // 浮点数
2. Number对象
Number
对象是JavaScript的内置对象,用于包装数字值。可以使用Number
对象的属性和方法来处理数值。
const numObj = new Number(42);
console.log(numObj); // [Number: 42]
注意:在绝大多数情况下,直接使用基本数值类型即可,无需显式创建Number
对象。
二、Number()构造函数
Number()
函数可以用作构造函数,也可以作为普通函数调用。
1. 作为构造函数
当使用new
关键字时,Number()
会创建一个Number
对象的实例。
const numObj = new Number(42);
console.log(typeof numObj); // "object"
2. 作为函数调用
不使用new
时,Number()
会将其参数转换为数值类型。
const num = Number("42");
console.log(num); // 42
console.log(typeof num); // "number"
3. 转换规则
-
字符串:如果字符串能被解析为数值,则返回相应的数值,否则返回
NaN
。Number("42"); // 42 Number("42abc"); // NaN
-
布尔值:
true
转换为1
,false
转换为0
。Number(true); // 1 Number(false); // 0
-
null
和undefined
:null
转换为0
,undefined
转换为NaN
。Number(null); // 0 Number(undefined); // NaN
三、Number.isFinite()
Number.isFinite()
方法用来判断传入的值是否是一个有限数(即既不是Infinity
也不是-Infinity
,且类型为number
)。
Number.isFinite(42); // true
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false
Number.isFinite(NaN); // false
Number.isFinite("42"); // false
注意:与全局函数isFinite()
不同,Number.isFinite()
不会对非数值类型进行隐式转换。
isFinite("42"); // true (字符串被转换为数字42)
Number.isFinite("42"); // false
四、Number.isInteger()
Number.isInteger()
方法用于判断传入的数值是否是整数。
Number.isInteger(42); // true
Number.isInteger(3.14); // false
Number.isInteger("42"); // false
Number.isInteger(NaN); // false
注意:仅对类型为number
的值有效,且小数部分为0
。
五、Number.isNaN()
Number.isNaN()
方法用于判断传入的值是否是NaN
(非数字)。
Number.isNaN(NaN); // true
Number.isNaN(42); // false
Number.isNaN("NaN"); // false
Number.isNaN(undefined); // false
区别于全局函数isNaN()
:
全局函数isNaN()
会对非数值类型进行转换,而Number.isNaN()
不会。
isNaN("NaN"); // true (字符串"NaN"被转换为NaN)
Number.isNaN("NaN"); // false
六、Number.isSafeInteger()
Number.isSafeInteger()
方法用于判断传入的值是否是安全整数。
1. 安全整数的概念
JavaScript中的安全整数范围为-(2^53 - 1)
到2^53 - 1
。超过此范围的整数在JavaScript中可能无法精确表示。
const maxSafe = Number.MAX_SAFE_INTEGER; // 9007199254740991
const minSafe = Number.MIN_SAFE_INTEGER; // -9007199254740991
2. 使用示例
Number.isSafeInteger(42); // true
Number.isSafeInteger(9007199254740991); // true
Number.isSafeInteger(9007199254740992); // false
Number.isSafeInteger(3.14); // false
Number.isSafeInteger("42"); // false
七、parseInt() 和 parseFloat()
1. parseInt()
parseInt()
函数用于解析字符串并返回一个整数。
parseInt("42"); // 42
parseInt("42px"); // 42
parseInt(" 42 "); // 42
parseInt("0x2A"); // 42 (十六进制)
parseInt("1010", 2); // 10 (二进制解析)
parseInt("hello"); // NaN
注意事项:
parseInt()
会忽略字符串前面的空格。- 当遇到非数字字符时,会停止解析。
- 可以指定进制作为第二个参数。
2. parseFloat()
parseFloat()
函数用于解析字符串并返回一个浮点数。
parseFloat("3.14"); // 3.14
parseFloat("3.14abc"); // 3.14
parseFloat(" 3.14 "); // 3.14
parseFloat(".1"); // 0.1
parseFloat("1e3"); // 1000
parseFloat("hello"); // NaN
注意事项:
- 与
parseInt()
类似,parseFloat()
会解析到不能解析为数字的字符为止。 parseFloat()
始终解析十进制数,无法指定进制。
八、总结
Number()
构造函数:可以将值转换为数值类型,或创建Number
对象实例。Number.isFinite()
:判断一个数值是否为有限数。Number.isInteger()
:判断一个数值是否为整数。Number.isNaN()
:判断一个值是否为NaN
且类型为number
。Number.isSafeInteger()
:判断一个数值是否为安全整数。parseInt()
:解析字符串并返回整数,支持指定进制。parseFloat()
:解析字符串并返回浮点数。
进一步阅读: