JavaScript 数学运算
·
欢迎来到 JavaScript 数学运算的全面回顾!本篇博客将带你深入了解 JavaScript 中数字数据类型、运算符、类型转换、优先级以及各种内置方法,助你更好地驾驭数字世界。
数字数据类型 (Number Data Type)
在 JavaScript 中,Number 类型不仅包括整数,还涵盖了浮点数(带小数点的数字)、Infinity 和 NaN。Infinity 代表一个比任何其他数字都大的数,而 -Infinity 则代表比任何其他数字都小的数。NaN(Not a Number,非数字)是一个特殊的标记,表示一个无效的数值,例如将字符串 "Jessica" 强制转换为数字时得到的结果。
常见算术运算符
JavaScript 提供了一系列标准的算术运算符,用于执行基本的数学计算:
- 加法 (+): 用于求两个或多个数字的和。
- 减法 (-): 用于求两个数字的差。
- 乘法 (*)**: 用于求两个或多个数字的积。
- 除法 (/): 用于求两个数字的商。
- 除以零: 当你尝试除以零时,JavaScript 会返回
Infinity。 - 取余 (%): 返回除法的余数。
- 幂运算 (**)**: 将一个数提升为另一个数的幂。
数字与字符串的运算
在 JavaScript 中,当数字和字符串进行运算时,会发生类型强制转换(coercion)。
- 当使用
+运算符时,JavaScript 会将数字强制转换为字符串,然后将两个值连接起来。 - 当使用
-、*或/运算符时,JavaScript 会尝试将字符串强制转换为数字,然后进行计算,结果是一个数字。 - 对于
null和undefined,在数学运算中,null被当作0,而undefined被当作NaN。
const result = 5 + '10'; // 510,类型为 string
const subtractionResult = '10' - 5; // 5,类型为 number
const result1 = null + 5; // 5
const result2 = undefined + 5; // NaN
运算符优先级
运算符优先级决定了表达式中操作的执行顺序。高优先级的运算符会先被计算。例如,括号内的值会首先被计算,乘法和除法的优先级高于加法和减法。如果运算符具有相同的优先级,JavaScript 会根据结合性(associativity)来决定执行顺序。
结合性规定了当多个相同优先级的运算符存在时,表达式是从左到右还是从右到左计算。例如,幂运算(**)是右结合的。
const result = (2 + 3) * 4; // 20,括号内先计算
const result2 = 10 - 2 + 3; // 11,从左到右计算
const result3 = 2 ** 3 ** 2; // 512,从右到左计算 (3**2)
自增与自减运算符
- 自增运算符 (
++): 将变量的值增加一。- 前缀形式 (
++num): 先增加变量的值,然后返回新值。 - 后缀形式 (
num++): 先返回当前变量的值,然后增加它。
- 前缀形式 (
- 自减运算符 (
--): 将变量的值减少一。前缀和后缀形式的工作方式与自增运算符相同。
let x = 5;
console.log(++x); // 6
console.log(x); // 6
let y = 5;
console.log(y++); // 5
console.log(y); // 6
复合赋值运算符
复合赋值运算符是标准算术运算和赋值操作的简写形式。例如,+= 运算符将右侧的值加到左侧变量上,并将结果重新赋值给该变量。
+=、-=、*=、/=、%=、**=
布尔值与相等性
- 布尔值 (Boolean): 是一种只有两个值的数据类型:
true或false。 - 相等运算符 (
==): 在检查值是否相等前会进行类型强制转换。console.log(5 == '5'); // true - 严格相等运算符 (
===): 不进行类型强制转换,同时检查值和类型是否都相等。console.log(5 === '5'); // false - 此外还有不相等 (
!=) 和严格不相等 (!==) 运算符,它们的工作方式类似。
比较运算符
比较运算符用于比较两个值,并返回一个布尔值 (true 或 false)。
>(大于)>=(大于或等于)<(小于)<=(小于或等于)
一元运算符 (Unary Operators)
一元运算符只对一个操作数进行操作。
- 一元加号 (
+): 将其操作数转换为数字。const str = '42'; const num = +str; // 42,类型为 number - 一元减号 (
-): 对操作数取反。 - 逻辑非 (
!): 翻转其操作数的布尔值。
条件语句、真值与假值
if/else if/else:if语句检查一个条件,如果条件为真值(truthy),则执行代码块。真值是在布尔上下文中被评估为true的任何值。相反,假值(falsy)是评估为false的值,包括false、0、""(空字符串)、null、undefined和NaN。const score = 87; if (score >= 90) { /* ... */ } else if (score >= 80) { console.log('You got a B'); // 输出: You got a B }- 三元运算符 (Ternary Operator): 一种更简洁的
if/else语句写法。const temperature = 30; const weather = temperature > 25 ? 'sunny' : 'cool'; console.log(`It's a ${weather} day!`); // 输出: It's a sunny day!
二元逻辑运算符 (Binary Logical Operators)
- 逻辑与 (
&&): 检查两个操作数是否都为真。 - 逻辑或 (
||): 检查至少一个操作数是否为真。 - 空值合并 (
??): 仅当第一个操作数为null或undefined时,才返回第二个值。const userSettings = { theme: null }; let theme = userSettings.theme ?? 'light'; console.log(theme); // 输出: light
Math 对象
Math 对象提供了许多数学常量和方法。
Math.random(): 生成一个介于 0(包含)和 1(不包含)之间的随机浮点数。Math.max()&Math.min(): 返回一组数字中的最大或最小值。Math.ceil(): 向上取整到最接近的整数。Math.floor(): 向下取整到最接近的整数。Math.round(): 四舍五入到最接近的整数。Math.trunc(): 移除数字的小数部分,不进行四舍五入。Math.sqrt()&Math.cbrt(): 返回一个数的平方根或立方根。Math.abs(): 返回一个数的绝对值。Math.pow(): 将第一个数提升为第二个数的幂。
常见数字方法
isNaN(): 全局函数isNaN()和Number.isNaN()用于检查一个值是否为NaN。Number.isNaN()更可靠,因为它不会进行类型强制转换。console.log(isNaN("NaN")); // true (全局函数会尝试转换) console.log(Number.isNaN("NaN")); // false (Number.isNaN 不会转换)parseFloat(): 解析一个字符串并返回一个浮点数。parseInt(): 解析一个字符串并返回一个整数。它会在遇到第一个非数字字符时停止解析。toFixed(): 在一个数字上调用,并返回该数字的字符串表示,保留指定位数的小数。
希望这篇回顾能帮助你巩固 JavaScript 数学知识!
更多推荐


所有评论(0)