操作符运算

学习总结自沙翼老师的前端音频教程#陪你读书(JavaScript WEB前端)#(喜马拉雅)

一元操作符(9个)
  1. 定义:只可以操作一个表达式的符号
  2. 一元加、一元减、递增加、递增减、按位非、逻辑非、typeof、delete、void
    • 一元加/减:将表达式转换成数字
    • typeof:用于判断数据类型
    • delete:删除对象属性
    • 逻辑非(!*):转换成布尔类型之后取反 !!a相当于将操作数转换成布尔类型
    • void:无论表达式是什么,都返回void

以下使用 a 代替操作数(仅分析一元加/减递增加/减):

1. 一元加/减

一元加(+a)/一元减(-a)

  • 相同点:判断操作数a是否是数值类型,如果不是,将操作数a先转换成数值类型

  • 不同点:一元减取负数

  • 应用:将表达式转换成数字

var b = false 
-b // false => 0 => -0

在这里插入图片描述

2. 递增加/减

类型(2种):前置递增加/减(++a / --a)、后置递增加减(a++ / a–)

  • 区别:前置递增加/减自加自减后再执行包含其的语句,后置递增加/减先执行包含其的语句再自加自减
var a = 4
var b = 6
var c = ++a + b--
// ++a(前置:自加后执行语句)=> (++a) = 5, a = 5
// b--(后置:执行语句后自减)=> (b--) = 6, b = 5
// c = (++a) + (b--) => 5 + 6 => 11 

在这里插入图片描述

操作符运算三特点
1. 优先级

属性访问 > 一元操作符 > 乘除 > 加减 > 比较 > 相等 > 与运算 > 或运算 > 三目运算 > 赋值运算

  • 属性访问优先级最高(obj.name / obj[‘name’)
  • 一元操作符次之
  • 赋值运算最低
  • 乘除大于加减(同数学)
  • 相等 > && > ||
2. 结合性

左/右结合:从左/右开始运算

  • 当操作符优先级相同的时候
  • 其中只有一元运算符、赋值运算符、三目运算符从右往左运算
3. 运行顺序

当表达式中含有表达式的的时候,从左往右运算

应用
var a = 1
!a++ // false

在这里插入图片描述

x = a ? b : c ? d : e ? f : g
// 根据结合性:三目从右开始运算
x = a ? b : (c ? d : (e ? f : g))
var a = 1
var b = a++ + ++a
// 根据运行顺序:从左往右
1. 计算b
2. 计算a++,(a++=> 1,此时 a = 2
3. 计算+
4. 计算++a,(++a)=> 2+1 => 3,此时 a = 3
5. 计算结果 b = (a++) + (++a) => 1 + 3 => 4

在这里插入图片描述

var a = 1
b = a+++a // b = 3, a = 2

在这里插入图片描述

### 双目操作符与单目操作符运算顺序及优先级规则 在编程语言中,双目操作符和单目操作符运算顺序以及优先级规则是理解表达式求值的关键。以下将详细阐述这两种操作符的优先级及结合性。 #### 1. 单目操作符的优先级及结合性 单目操作符通常作用于一个操作数上,其优先级一般较高。例如,前缀递增 (`++`)、前缀递减 (`--`)、逻辑非 (`!`)、按位取反 (`~`) 等都属于单目操作符[^2]。这些操作符的结合性通常是右结合,意味着当多个同优先级的单目操作符出现在同一个表达式中时,它们会从右向左依次求值。 - **示例**: ```c int a = 5; int b = ++a + !0; // 前缀递增和逻辑非 ``` 在这个例子中,`++a` 的优先级高于 `+` 和 `!`,因此首先执行 `++a`,然后计算 `!0`,最后进行加法运算[^4]。 #### 2. 双目操作符的优先级及结合性 双目操作符作用于两个操作数之间,如算术操作符(`+`, `-`, `*`, `/`)、关系操作符(`<`, `>`, `==`, `!=`)、逻辑操作符(`&&`, `||`)等。双目操作符的优先级相对较低,且大多数双目操作符的结合性为左结合,这意味着它们会从左向右依次求值。 - **示例**: ```c int a = 3, b = 4, c = 5; int result = a + b * c; // 算术操作符 ``` 在这个例子中,`*` 的优先级高于 `+`,因此先计算 `b * c`,再将结果与 `a` 相加[^4]。 #### 3. 单目与双目操作符的优先级比较 单目操作符的优先级通常高于双目操作符。例如,在表达式中同时出现单目操作符(如前缀递增)和双目操作符(如加法)时,单目操作符会优先执行[^4]。 - **示例**: ```c int a = 5, b = 6; int result = ++a + b; // 单目与双目操作符混合 ``` 在这个例子中,`++a` 的优先级高于 `+`,因此首先执行 `++a`,然后再将结果与 `b` 相加。 #### 4. 结合性对运算顺序的影响 结合性决定了当多个同优先级的操作符出现在同一表达式中时,如何分组求值。例如: - 单目操作符通常是右结合。 - 大多数双目操作符是左结合,但赋值操作符是右结合[^3]。 - **示例**: ```c int a = 1, b = 2, c = 3; int result = a + b + c; // 左结合 ``` 在这个例子中,`+` 是左结合,因此先计算 `a + b`,再将结果与 `c` 相加[^4]。 ```c int a = 5, b = 6, c = 7; a = b = c; // 右结合 ``` 在这个例子中,赋值操作符是右结合,因此先计算 `b = c`,再将结果赋值给 `a`。 ### 总结 单目操作符的优先级通常高于双目操作符,且单目操作符的结合性多为右结合,而双目操作符的结合性多为左结合。了解这些规则对于正确理解和编写复杂的表达式至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值