JavaScript 运算符解析!!

1 运算符

1.1 运算符和表达式

① 运算符

运算符就是参与运算的符号,像+-*/ 等。

与运算符一起运算的变量、直接量、表达式称之为操作数

② 表达式
  1. 表达式是变量或者直接量与运算符组成的式子,表达式会有一个计算结果,称之为表达式的值,也就是说表达式是有值的。

  2. 最简单的表达式是"原始表达式", 如 直接量、 变量名、 关键字等。

  3. 复杂表达式由简单表达式组成, 运算符何以将简单表达式组合成复杂表达式。

  4. 注意带有副作用的表达式,这样的表达式除了有表达式的计算结果之外,还会对表达式中的变量产生影响。

1.2 运算符的分类

① 按照运算符需要的操作数的个数
一元运算符/一目运算符
二元运算符/二目运算符
三元运算符/三目运算符
② 按照运算符的功能
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
其他运算符

1.3 运算符讲解(按照功能)

① 算术运算符
运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
+加号2numbernumber
-减号2numbernumber
*乘号2numbernumber
/除号2numbernumber
%取余(取模)2numbernumber
+正号1numbernumber
-负号1numbernumber
++累加1numbernumber
累减1numbernumber

正号运算符:

通常会使用正号运算符来把其他类型的数据转为 number 类型,利用运算符自动类型转换。

累加运算符和累减运算符:

累加和累减都是一元运算符,操作数必须以变量的形式表示,具有副作用。

累加和累减的符号可以在操作数的前面也可以在操作数的后面,对操作数产生的副作用是一样的,但是所组成的表达式的值不同。

运算符在操作前面: 表单式取操作数累加或累减之后的值作为表达式的值。

运算符在操作数后面:表达式取操作数累加或累减之前的值作为表达式的值。

② 关系运算符(比较运算符)
运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
>大于2number、stringboolean
>=大于等于2number、stringboolean
<小于2number、stringboolean
<=小于等于2number、stringboolean
==相等2number、其他类型boolean
!=不相等2number、其他类型boolean
===全等2所有类型boolean
!==不全等2所有类型boolean

两个操作数比较大小的规则:

  1. 如果两个操作的类型不一致,各自自动转为 number 类型进行比较。
  2. 如果两个操作数都是 string 类型,按照 string 类型比较大小的规则进行比较。

string 类型的数据比较大小的规则:

  1. 比较的是字符对应的 unicode 编码,unicode 编码是数字,可以比较大小。
  2. 字符串比较是按位一位一位的比较,如果一个操作数第一位的字符比另外一个操作第一位字符的unicode编码大,该操作整体都大。

相等和不相等的判断规则:

  1. 如果两个操作数类型不一致,自动转为 number 之后进行比较。
  2. 如果两个操作数类型一致,直接看是不是一样的。

全等和不全等的判断规则:

  1. 如果两个操作数类型不一致,直接返回 false,不会进行自动类型转换的。
  2. 如果两个操作数类型一致,比较是否一样。

null 进行相等(==)判断的时候,非常特殊:

console.log(null == null);  	 // true
console.log(null == 0);     	 // false 
console.log(null == false); 	 // false
console.log(null == '');    	 // false
console.log(null == undefined);  // true 
③ 逻辑运算符
运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
&&逻辑与2任何类型取其中一个操作数作为表达式的值
||逻辑或2任何类型取其中一个操作数作为表达式的值
!逻辑非1booleanboolean

逻辑与组成的表达式的值的计算规则:

  1. 如果第一个操作数不成立,取第一个操作数作为表达式的值。
  2. 如果第一个操作数成立,取第二个操作数作为表达式的值。

逻辑或组成的表达式的值的计算规则:

  1. 如果第一个操作数不成立,取第二个操作数作为表达式的值。
  2. 如果第一个操作数成立,取第一个操作数作为表达式的值。
④ 赋值运算符
运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
=赋值2无要求,左边的操作数必须是变量变量(左边操作数)的值作为表达式的值
+=赋值求和2无要求,左边的操作数必须是变量变量(左边操作数的值作为表达式的值
-=赋值求差2无要求,左边的操作数必须是变量变量(左边操作数的值作为表达式的值
*=赋值求积2无要求,左边的操作数必须是变量变量(左边操作数的值作为表达式的值
/=赋值求商2无要求,左边的操作数必须是变量变量(左边操作数的值作为表达式的值
%=赋值求余2无要求,左边的操作数必须是变量变量(左边操作数的值作为表达式的值
+=赋值连接2string,左边的操作数必须是变量变量(左边操作数的值作为表达式的值

总结:

  1. 赋值运算符要求左边的操作数必须是变量,右边的操作数变量、直接量、表达式都可以。
  2. 赋值运算符都有副作用,使用的就是赋值运算符的副作用,左边操作数会被修改。
  3. 赋值运算符组成的表达式以左边操作数为值(修改过后的)。
⑤ 其他运算符
运算符含义操作数个数操作数的类型要求组成的表达式的值的类型有无副作用
typeof判断数据的类型1任意类型string
,逗号2
+字符串连接符2stringstring
?:比较运算符3任意类型取第二个操作数或者第三个操作数作为表达式的值

+ 符合具有3个含义:

  1. 如果操作数只有一个,+ 表示正号运算符。
  2. 如果操作数两个,且没有任何一个操作数是字符串,+ 表示加号。
  3. 如果操作数连个,只要有一个操作数是字符串,+ 表示字符串连接符。

?:三元运算符组成的表示的值的规则:

  1. 如果第一个操作数成立,取第二个操作数作为表达式的值。
  2. 如果第一个操作数不成立,取第三个操作数作为表达式的值。

1.4 运算符优先级

1、 一元运算符: ++ -- ! typeof 
2、 乘除取余、加减
3、 关系运算符
4、 逻辑运算符
5、 赋值运算符
6、 ?:

注意: 使用 () 可以提高优先级。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是小洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值