数值由任意系列的数字字符组成,例如:
5
数字数据类型还包含一些特殊的全局属性,
表示数字概念(如 Infinity
和 NaN
),值的含义是
“不是数字”可能的结果是尝试对
非数字值的计算。
数字对象
将值传递给 Number()
函数时,该值将转换为
与数字等效项。例如,一个数字字符串会产生等效的
数字原语:
Number( "10" );
> 10
将 false
或 null
值传递给 Number()
会返回 0
,true
会返回
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^1024
和2^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 / 0
,Math.sqrt( -10 )
) - 结果不确定的算术运算 (
0 * Infinity
) - 包含显式
NaN
(NaN + 2
) 或NaN
条结果 (2 * "string" / 2
)
检查您的理解情况
将 false
传递给 Number()
的结果是什么?
以下数学运算的结果是什么?
"Six" * 3