Numbers

数值由任意系列的数字字符组成,例如:

5

数字数据类型还包含一些特殊的全局属性, 表示数字概念(如 InfinityNaN),值的含义是 “不是数字”可能的结果是尝试对 非数字值的计算。

将值传递给 Number() 函数时,该值将转换为 与数字等效项。例如,一个数字字符串会产生等效的 数字原语:

Number( "10" );
> 10

falsenull 值传递给 Number() 会返回 0true 会返回 1

Number( null );
> 0

Number( false );
> 0

Number( true );
> 1`

无法转换值(例如 undefined 或字符串) 包含非数字字符,Number 函数会返回 NaN

Number( undefined );
> NaN

Number( "The number 3." );
> NaN

原型继承中所述, 您可能几乎没有理由将 Number 对象用作 构造函数,因为它会创建 Number 对象,而不是数字字面量。

let numObject = new Number( 15 );

numObject;
> Number { 15 }

该对象表现为为其指定的值以用于数学运算, 无法对数字字面量进行严格相等比较,因为数据类型 不匹配,而不会提供任何与字面量值相比的实际优势。

let tenObject = new Number( 10 );

tenObject + 5;
> 15

tenObject === 10;
> false

浮点数和整数

JavaScript 只有一种数字类型:64 位 IEEE 754-1985 双精度 浮点数 -2^10242^1024。JavaScript 在将任何数字存储到内存中之前 会将该数字转换为二进制浮点数(也称为浮点数)。

该 64 位存储空间(一个正或负“符号”位,11 位用于 指数和小数的 52 位)都可能导致出现任何数字的精度误差 输入的数字无效。这一限制 JavaScript 的数字数据类型。

0.1 + 0.7
> 0.7999999999999999

数值可以改为存储为整数(即浮点数) 不含 -(2^53 − 1)2^53 − 1 之间的小数。因为浮动和 整数的存储方式基本相同, 这些数字的运作原理不过,我们建议 尽可能避免精度错误。

数字运算符

将标准数学运算符与数字基元结合使用时, 数学运算顺序 适用:任何用括号括起来的表达式都先求值,后跟 指数、乘法、除法、加法和减法。

运算符 名称 说明 用法 结果
+ 加法 2+2 4
- 减法 4-2 2
* 2*5 10
/ 部门 10/5 2
++ 增加 对数字加上一 2++ 3
-- 减少 将数字减去 1 3-- 2
** 指数 返回提高第一个
的结果 一个操作数的第二个操作数次幂。
2**4 16
% 其余 返回
时剩余的余数 第一个操作数除以第二个操作数。
12%5 2

您还可以使用数学赋值运算符来执行 对变量值执行运算,并立即赋值 新计算的值。

运算符 名称 用法
+= 添加分配 myValue += 2
-= 减法分配 myValue -= 2
*= 乘法分配 myValue *= 2
/= 部门分配 myValue /= 2
**= 指数赋值 myValue **= 2
%= 剩余分配任务 myValue %= 2

符号值

数字基元还适用于一些特殊情况:“非数字” 值 (NaN),以及表示无穷大的值(可以是正数) (Infinity) 或否定 (-Infinity)。

如果除以 0(一种情况),您可能很少会遇到 Infinity 大多数编程语言都会抛出错误:

10 / 0
> Infinity

请注意,JavaScript 区分大小写。Infinity 是数字数据类型 表示无穷大的概念,但 infinity 没有特殊含义:

Infinity
> Infinity

infinity
> Uncaught ReferenceError: infinity is not defined

NaN(表示“不是数字”) 例如,如果算术运算的结果 不能表示为数字例如,由于 JavaScript 从值和上下文获取数据类型,仅包含数字的字符串字面量可以 可以用于数学运算:

"2" * 2;
> 4

但是,如果该字符串无法解析为数字值, 运算将生成一个非数字:

"two" * 2;
> NaN

系统会在将无效值表示为数字的任何情况下返回 NaN 。示例如下:

  • 失败的数字转化(例如 parseInt( undefined )
  • 结果不是实数的算术运算(例如, 0 / 0Math.sqrt( -10 )
  • 结果不确定的算术运算 (0 * Infinity)
  • 包含显式 NaN (NaN + 2) 或 NaN 条结果 (2 * "string" / 2)

检查您的理解情况

false 传递给 Number() 的结果是什么?

NaN
1
0
错误

以下数学运算的结果是什么?

"Six" * 3

18
0
2
正确
NaN