js之运算符

在这里插入图片描述

4、运算符

运算符也被称为操作符,用于实现赋值、比较和执行算数运算等功能的符号

js中常用的运算符有:

  1. 算术运算符
  2. 递增和递减运算符
  3. 比较运算符
  4. 逻辑运算符
  5. 赋值运算符

4.1 算术运算符

算术运算符用于执行两个变量或值的算术运算

常见的有我们熟悉的:+(加)、-(减)、*(乘)、/(除),还有个取余 %

4.2 浮点数精度的问题

浮点数的最高精度是17位小数,所以在进行算术计算时,其精度远远不如整数


所以,有一个很经典的题目:0.1 + 0.2 为什么不等于 0.3

因为js引擎执行代码的时候,需要转换为二进制的形式,但是0.1 和 0.2 的二进制浮点数并不十分精确,它们相加的接近于 0.30000000000000004 (17位小数),所以 0.1 + 0.2 != 0.3

那么有什么方法来判断0.1 + 0.2 = 0.3 呢?

最常见的方法是设置一个误差范围值,通常称为“机器精度”,这个值通常是2^-52

从ES6开始,该值被定义在Number.EPSILON中,我们可以直接拿来用。所以可以使用 Number.EPSILON 来比较两个数字是否相等

function numberIsEqual(n1, n2) {
    return Math.abs(n2 - n1) < Number.EPSILON;
}

var a = 0.1 + 0.2
var b = 0.3
console.log(numberIsEqual(a, b));

4.3 递增和递减运算符

如果需要反复给数字变量添加或减去1,可以使用递增(++)和递减(–)运算符来完成

在js中,递增(++)和递减(–)既可以放在变量前面,也可以放在变量后面。放在变量前面时,我们称之为前置递增(递减)运算符;放在变量后面时,我们称之为后置递增(递减)运算符

注意:递增和递减运算符必须和变量配合使用

1、前置递增运算符

++num 等价于 num = num + 1

var num = 10;
console.log(++num);  // 11
console.log(++num + 10);  // 2

先自加,再返回,递减也一样

2、后置递减运算符

num++ 类似于 num = num + 1,单独使用时,++numnum++ 效果一样

var num = 10;
num++;
console.log(num++); // 11,单独使用,跟++num无区别

var num1 = 10;
console.log(num1++ + 10); // 20, 先返回
console.log(num1);  // 11 , 再加1

先返回,再自加,递减也一样

4.4 比较运算符

比较运算符(关系运算符)用于两个数据进行比较,返回一个布尔值 true/false

比较运算符说明案例结果
><大于号、小于号2>1、1<2true
>=<=大于等于号、小于等于号2>=2、2<=2true
==判断号(会转型18 == 18、18 == ‘18’true
!=不等号18 != 18false
===!==全等 要求 数据类型 都一样18 === ‘18’false

== 判断运算符会将数据转型,如:1 == '1',会将右边的字符串转化为数字型,最终返回true

当判断的时候,能用 === 就别用 ==,让js引擎直接判断是否全等,提高性能

4.5 逻辑运算

逻辑运算符是用来进行布尔值运算的运算符,其返回值是布尔值,后面开发中经常用于多个条件的判断

逻辑运算符说明案例
&&“逻辑与”,简称“与” andtrue && false
||“逻辑或”,简称“或” andtrue || false
!“逻辑非”, 简称“非” not!true

1、与运算

  • 语法:表达式1 && 表达式2
  • 如果第一个表达式1为真,就返回表达式2
  • 如果第一个表达式1为假,就返回表达式1
console.log(123 && 456); // 第一个值为真,故返回 456
console.log(0 && 1); // 0
console.log(1 && 1 + 2 * 3);  // 7(涉及运算符优先级)

console.log(0 && 1 && 2+3 && 2*3);  // 直接返回0
console.log('' && 1);  // 返回空的
console.log(null && 1);  // null
console.log(undefined && 1);  // undefined
console.log(NaN && 1);  // NaN

2、或运算

  • 语法:表达式1 && 表达式2
  • 如果第一个表达式1的值为真,则返回表达式1
  • 如果第一个表达式1的值为假,则返回表达式2
console.log(123 || 456); // 第一个值为真,故返回 123
console.log(0 || 1); // 1
console.log(1 || 1 + 2 * 3); // 1

console.log(0 || 1 || 2 + 3 || 2 * 3); // 1
console.log('' || 1); // 1
console.log(null || 1); // 1
console.log(undefined || 1); // 1
console.log(NaN || 1); // 1

注意:

var num = 0;
console.log(123 || num++);
console.log(num); // 0
  • 第一个表达式为真,就返回123,后面不再执行,所以num为0

4.6 赋值元素符

用来把数据赋值给变量的运算符

赋值运算符说明案例
=直接赋值var x = 1;
+=、 -=加、减一个数 后赋值var age = 10; age += 5; //15
*=、 /=、 %=乘、除、取余、 后在赋值var age = 2; age *= 5; //10
// 取余 后赋值
var age = 5
age %= 2;
console.log(age);  // 1

4.7 运算符优先级

优先级运算符顺序
1小括号()
2一元运算符++、–、!
3算数运算符先 * / % 后 + -
4关系运算符>、>=、<、<=
5相等运算符==!====!==
6逻辑运算符先 && 后 ||
7赋值运算符=
8逗号运算符
  • 一元运算符里面的逻辑非 ! 优先级比其他两个都要高
  • 逻辑与逻辑或 优先级高
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值