数据类型和算术运算符
了解 JavaScript 中可用的不同数据类型和算术运算符。
简介
大多数编程语言都允许你创建表示数字、文本中的字符,或更长文本的值。你也可以使用布尔值来表示真和假的概念。此外,还可以创建表示“无值”状态的值。这些值统称为 原始数据类型。
“原始”一词并非带有贬义。这些数据类型并不比 JavaScript 中其他类型低级。名称“原始”源于它们的简单性。你之后将学习的其他数据类型是 复合类型,它们由多个原始数据类型组成。
原始类型
在 JavaScript 中,共有七种原始类型:
- 布尔类型(
true或false) - 数字类型(包括整数如
1、-2,以及浮点数如1.1、2e-3) - 字符串类型(用单引号
''或双引号""表示,例如'ES6 实践'或"ES6 实践") - null 类型(用
null表示) - undefined(用
undefined表示) - bigint(用于表示大整数)
- Symbol(暂时无需关注)
整数与算术运算符
让我们尝试一些 JavaScript 表达式。
1console.log(5 + 2); 2console.log(7 % 5); 3console.log(5 ** 2);
处理整数非常直接。你可以使用四种基本算术运算符(+、-、*、/)分别进行加法、减法、乘法和除法。
% 运算符称为取模运算符。a % b 返回 a / b 的余数。在示例中,7 / 5 的结果是 1,余数为 2,因此返回值是 2。
** 运算符称为幂运算符。5 ** 2 表示 5 的平方。
浮点数
运行以下代码:
1console.log(0.1 + 0.2); 2console.log(3.1e-3);
由于数值的内部表示方式,0.1 + 0.2 并不精确等于 0.3。这是正常现象,在大多数编程语言中都会出现。
3.1e-3 是 0.0031 的科学记数法表示形式。可以理解为 3.1 乘以 10 的负三次方。虽然它与 3.1 * (10 ** -3) 形式相似,但存在细微差别:3.1e-3 会被解析为最接近 0.0031 的浮点数;而 3.1 * (10 ** -3) 是一个需要计算的复合表达式:
1console.log(3.1 * (10 ** -3))
即使使用浮点数运算,也无法完全保证精确性。
NaN
除以零(0 / 0)或类型不匹配的操作会产生一个特殊值,称为 非数字,即 NaN。
1console.log(0 / 0); 2console.log('JavaScript 实践' * 2);
上述代码中的第二个例子对 Python 用户来说可能比较有趣,因为在 Python 中,结果会是 'JavaScript 实践JavaScript 实践'。但 JavaScript 不同于此行为。
无穷大
还有一个有趣的值:无穷大(Infinity),它属于 Number 类型。
1console.log(1 / 0); 2console.log(Infinity * Infinity); 3console.log(-1 / 0); 4console.log(1e+308); 5console.log(1e+309);
JavaScript 将非常大的数值识别为无穷大。例如,10 的 309 次方会被表示为无穷大。除以零的结果也是无穷大。
Quiz
JavaScript 提供了一种原始类型用于字符串,即 string 类型。