数字

数字 属于 JavaScript

20 个练习

关于 数字

JavaScript 中有两种不同的数字:数字和“bigints”。

数字最常用,表示双精度 64 位浮点格式的数值数据类型。

  • number:双精度 64 位浮点格式(IEEE 754)的数值数据类型。例如 -6、-2.4、0、0.1、1、3.14、16.984025、25、976、1024.0 和 500000。
  • bigint:能以任意精度格式表示_整数_的数值数据类型。例如 -12n、0n、4n 和 9007199254740991n。
let numericValue = 42;
// => 42

JavaScript 代码中像 42 这样的数字字面量是浮点值,不是整数。日常使用中并没有单独的整数类型。bigint类型的设计目的不是在日常使用中取代number类型。42仍然是Number,不是BigInt。

数字也可以用 0b101、0o13、0x0A 这样的字面量形式表示。要了解更多关于数字词法语法的内容,请参见这里。

特殊表示法

指数表示法

E 表示法表示一个需要乘以 10 的指定次幂的数字。E 表示法的格式是:先写一个数字,后面跟 e 或 E,再跟上要乘的 10 的次幂。

const num = 3.125e7;
// => 31250000
// The notation essentially says, "Take 3.125 and multiply it by 10^7".

E 表示法也可以用来表示非常小的数字:

const num = 325987e-6; // Equals 0.325987
// The notation essentially says, "Take 325987 and multiply it by 10^-6.

下划线表示法

下划线可以让大数字更容易阅读。编译器会完全忽略这些下划线。

const num = 1_000_000; // You can read this as 1,000,000
console.log(num);
// => 1000000

内置对象

处理数字时,有两个内置对象很有用:

Math还包含对数字取整的方法。关于可用的取整选项,可以阅读这篇 javascript.info 上关于取整的文章。

Math.floor(234.34); // => 234
Math.ceil(234.34); // => 235

内置的全局object Number 同时也是一个全局function,可以用来把_几乎任何_类似数字的东西转换成number。它不像把string_解析_成number那样宽容。

const date = new Date('December 17, 1995 03:24:00');
const unix = Number(date);

unix;
// => 819199440000

JavaScript 中的数字有三类最大值(以及最小值 / 最大负值):

  • VALUE:由Number.MAX_VALUE和Number.MIN_VALUE给出
  • INFINITY:由Number.POSITIVE_INFINITY和Number.NEGATIVE_INFINITY给出
  • SAFE_INTEGER:由Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER给出

由于 JavaScript 中数字的实现方式,Number.MIN_VALUE和Number.MAX_VALUE之间的数字并非全都能表示。不过,Number.MIN_SAFE_INTEGER - 1和Number.MAX_SAFE_INTEGER + 1之间的_每一个_数字都能表示。

特殊数字值

JavaScript 有几个特殊的数字值:

  • 两个错误值:NaN和Infinity。
  • 两个零值:+0和-0。

NaN:非数字

错误值NaN(也叫“非数字”)会在以下情况中产生。

  • 数字无法解析:
    Number('123'); // => 123
    Number('Hello, World!'); // => NaN
    
  • 操作失败:
    Math.sqrt(-64); // => NaN
    
  • 其中一个操作数是 NaN:
    NaN + 69; // => NaN
    

NaN是唯一不等于自身的值:

NaN === NaN; // => false

如果想检查某个值是否为NaN,就必须使用全局函数isNaN():

isNaN(NaN); // => true
isNaN(123); // => false

Infinity

Infinity是一个错误值,表示以下两种问题之一:

  • 数字因为量级过大而无法表示。
    Math.pow(2, 1024); // => Infinity
    
  • 发生了除以零。
    6 / 0; // => Infinity
    -6 / 0; // => -Infinity
    

Infinity比任何其他数字都大(NaN除外)。同样,-Infinity比任何其他数字都小(NaN除外)。

全局函数isFinite()可以检查某个值是否是真正的数字(既不是无穷大,也不是NaN):

isFinite(80085); // => true
isFinite(Infinity); // => false
isFinite(NaN); // => false

两个零

+0和-0在 JavaScript 中是两个不同的数字。当你表示的数字小到与 0 无法区分时,就可能产生它们。带符号的零让你可以记录自己是从“哪个方向”趋近零的,也就是这个数字在被视为零之前带什么符号。最佳实践是假装只有一个零。

比较

如果两个数字的值相同,就认为它们相等。

1 == 1.0;
// => true

1 === 1.0;
// => true
// Remember, all numbers are floating-points, so this is
// different syntax for the exact same value.

1 === 1n;
// => false
// Strictly checking a number against a bigint will always result
// in false.

关于一般的比较以及在 JavaScript 中比较数值的更多信息,请参见比较。

坑

由于 JavaScript 中的数字是浮点数,对这些值进行的所有数学运算都是浮点运算。因此,在 JavaScript 中:

0.1 + 0.2 === 0.3;
// => false

简要说明请参见 0.30000000000000004.com,深入说明请参见 Oracle Numerical Computation Guide 的附录 D:“What Every Computer Scientist Should Know About Floating-Point Arithmetic”。

通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 数字

练习已锁定

再解锁 1 个练习即可练习 数字