您的浏览器过于古老 & 陈旧。为了更好的访问体验, 请 升级你的浏览器
一纸荒年 发布于2019年11月27日 23:53

原创 JavaScript中的基础数学 — 数字和操作符

156 次浏览 读完需要≈ 21 分钟 JavaScript

内容目录

数字类型

在编程中,即使是人人熟知的最普遍的十进制数,也比你想象的要复杂的多。我们使用不同的术语来描述不同类型的十进制数,例如:

  • 整数 就是整数,例如 10, 400, 或者 -5.
  • 浮点数 (浮点) 有小数点或小数位,例如 12.5,和 56.7786543。
  • 双精度双精度是一种特定类型的浮点数,它们具有比标准浮点数更高的精度(这意味着它们精确到更大的小数位数)。

我们甚至有不同类型的数字系统! 十进制是基数10(意味着它在每列使用0-9),但是我们也有这样的东西:

  • 二进制 — 计算机的最基础语言; 0s and 1s
  • 八进制 — 基数8,每列使用0-7
  • 十六进制 — 基数16,每列使用0-9,然后使用a-f。 在CSS中设置颜色时,可能会遇到这些数字。

数字类型应用

let myInt = 5;
let myFloat = 6.667;
console.log(myInt); // 5
console.log(myFloat); // 6.667
typeof myInt; // number
typeof myFloat; // number

算术运算符

运算符 名称 作用 示例
+ 加法 两个数相加。 6 + 9
- 减法 从左边减去右边的数。 20 - 15
* 乘法 两个数相乘。 3 * 7
/ 除法 用右边的数除左边的数 10 / 5
% 求余(有时候也叫取模) 在你将左边的数分成同右边数字相同的若干整数部分后,返回剩下的余数 8 % 3 (返回 2,8除以3的倍数,余下2 。)
** 取底数的指数次方,即指数所指定的底数相乘。它在EcmaScript 2016 中首次引入。 5 ** 5 (返回 3125,相当于 5 5 5 5 5 。)

运算符应用

let num1 = 10;
let num2 = 50;
9 * num1;
 // 90
num1 * 3; // 30
num2 / num1; // 5
5 + 10 * 3; // 35
num2 % 9 * num1;
num2 + num1 / 8 + 2;

运算符优先级

优先级 运算符 说明 结合性
1 [].() 字段访问、数组索引、函数调用和表达式分组 从左向右
2 ++ -- -~!delete new typeof void 一元运算符、返回数据类型、对象创建、未定
义的值
从右向左
3 *、/、% 相乘、相除、求余数 从左向右
4 +、- 相加、相减、字符串串联 从左向右
5 <<、>>、>>> 左位移、右位移、无符号右移 从左向右
6 <、<=、>、>=、instanceof 小于、小于或等于、大于、大于或等于、是否
为特定类的实例
从左向右
7 ==、!=、===、!== 相等、不相等、全等,不全等 从左向右
8 & 按位“与” 从左向右
9 ^ 按位“异或” 从左向右
10 | 按位“或” 从左向右
11 && 短路与(逻辑“与”) 从左向右
12 || 短路或(逻辑“或”) 从左向右
13 ?: 条件运算符 从右向左
14 =、+=、-=、*=、/=、%=、&=、|=、^=、<、<=、>、>=、>>= 混合赋值运算符 从右向左
15 , 多个计算 按优先级计算,然后从右向左

递增和递减运算符

递增运算符和递减运算符有两种形式:前置版本和后置版本。
前置版本:这种形式的运算符首先将运算对象加1(或减1),然后将改变后的对象作为求值结果。
后置版本:后置版本也会将运算符对象加1(或减1),但是求值结果是运算对象改变之前那个值得副本。

int i = 0,j;
j=++i;           //j=1,i=1:前置版本得到递增后的值
j=i++;           //j=1,i=2:后置版本得到递增前的值

这两种运算符必须作用于左值运算对象。前置版本将对象本身作为左值返回,后置版本则将对象原始值得副本作为右值返回。

赋值运算符

赋值运算符是向变量分配值的运算符,它只是将右边的值赋给左边的变量。

运算符 名称 作用 示例 等价于
+= 加法赋值 右边的数值加上左边的变量,然后再返回新的变量。 x = 3;
x += 4;
x = 3;
x = x + 4;
-= 减法赋值 左边的变量减去右边的数值,然后再返回新的变量。 x = 6;
x -= 3;
x = 6;
x = x - 3;
*= 乘法赋值 左边的变量乘以右边的数值,然后再返回新的变量。 x = 2;
x *= 3;
x = 2;
x = x * 3;
/= 除法赋值 左边的变量除以右边的数值,然后再返回新的变量。 x = 10;
x /= 5;
x = 10;
x = x / 5;
let x = 3; // x = 3
let y = 4; // y = 4
x *= y; // x = 12
x = y; // x = 4

比较运算符

有时,我们将要运行真/假测试,然后根据该测试的结果进行相应的操作 - 为此,我们使用比较运算符。

运算符 名称 作用 示例
=== 严格等于 测试左右值是否相同 5 === 2 + 4
!== 严格不等于 测试左右值是否相同 5 !== 2 + 3
< 小于 测试左值是否小于右值。 10 < 6
> 大于 测试左值是否大于右值 10 > 20
<= 小于或等于 测试左值是否小于或等于右值。 3 <= 2
>= 大于或等于 测试左值是否大于或等于正确值。 5 >= 4
Note: 您可能会看到有些人在他们的代码中使用 ==!=来判断相等和不相等,这些都是JavaScript中的有效运算符,但它们与 ===/ !==不同,前者测试值是否相同, 但是数据类型可能不同,而后者的严格版本测试值和数据类型是否相同。
var result = 5 > 10;//false

result = 5 > 4; //true

result = 5 > 5; //false

result = 5 >= 5; //true

result = 5 >= 4; //true

result = 5 < 4; //false

result = 4 <= 4; //true

//console.log("result = "+result);

//console.log(1 > true); //false
//console.log(1 >= true); //true
//console.log(1 > "0"); //true
//console.log(10 > null); //true
//任何值和NaN做任何比较都是false
//console.log(10 <= "hello"); //false
//console.log(true > false); //true

//console.log("1" < "5"); //true
//console.log("11" < "5"); //true

//比较两个字符串时,比较的是字符串的字符编码
//console.log("a" < "b");//true
//比较字符编码时是一位一位进行比较
//如果两位一样,则比较下一位,所以借用它来对英文进行排序
//console.log("abc" < "bcd");//true
//比较中文时没有意义
//console.log("戒" > "我"); //true

//如果比较的两个字符串型的数字,可能会得到不可预期的结果
//注意:在比较两个字符串型的数字时,一定一定一定要转型
console.log("1112312312" < +"5"); //true  
  • CodePlayer技术交流群1
  • CodePlayer技术交流群2

0 条评论

撰写评论