JS中数据的运算

作者:guopher
浏览:498

# 数据的运算

[toc]

## 运算符

### 算术(数学)运算

支持:加(+)、减(-)、乘(*)、除(/)、求余(%)

值得注意的是,+和-可以放到单个数据的前面,表示正负。

算术运算的表达式一定返回数字,可以利用其特点做类型转换,参考[类型的隐式转换](#类型的隐式转换)

### 字符串拼接

当`+`的两端有一个是字符串时,不再进行算术运算,而变为字符串拼接

表达式一定返回string,可以利用其特点做类型转换,参考[类型的隐式转换](#类型的隐式转换)

### 赋值运算

涉及的运算符:`=` `+=` `*=` `/=` `-=` `%=`。

其中,`a += xxx`,等效于`a = a + (xxx)`,其他类似

> 小贴士
> 赋值表达式始终返回赋值结果,我们可以利用该特点完成连续赋值
> ```js
> // 将 3 同时赋值给 a、b
> a = b = 3;
> ```

### 比较运算

涉及的运算符:`==` `===` `!=` `!==` `>` `>=` `<` `<=`

> 小贴士
> 在实际开发中,没有任何理由使用`==`和`!=`,你可以当做这两个运算符并不存在。
> 应该始终使用`===`和`!==`来比较相等和不相等

> 小贴士
> 比较运算始终返回boolean,我们可以利用这一点来完成某些赋值
> ```js
> // 啰嗦的代码
> if(sex === '男'){
>   user.isMale = true;
> }
> else{
>   user.isMale = false;
> }
> 
> // 简洁优雅的代码
> user.isMale = sex === '男'
> ```

### 逻辑运算

逻辑运算会涉及到[布尔判定](#布尔判定)

运算符:`!`

对后面的数据取反,表达式一定返回boolean。

可以利用其特点做类型转换,参考[类型的隐式转换](#类型的隐式转换)

运算符:`&&`

并且,真真为真,其他为假,具有短路规则。

表达式返回**最后一个判定的数据**

> 小贴士
> 在实际的开发中,我们可以利用短路规则简化代码
> ```js
> // 实现功能,如果exp有值(判定为真),就输出ok
> 
> // 啰嗦的代码
> if(exp){
>   console.log(exp);
> }
> 
> // 简洁的代码
> exp && console.log(exp)
> ```

运算符:`||`

或者,假假为假,其他为真,具有短路规则。

表达式返回**最后一个判定的数据**

> 小贴士
> 在实际的开发中,我们可以利用短路规则简化代码
> ```js
> // 实现功能,如果exp有值,就把它的值赋值给n,如果没有值,就给n赋值为默认值 1
> 
> // 啰嗦的代码
> if(exp){
>   n = exp;
> }
> else{
>   n = 1;
> }
> 
> // 简洁的代码
> n = exp || 1;
> ```

运算符:`? :`,格式`a ? b : c`

三目运算,判定a,为真时表达式返回b,否则返回c

> 小贴士
> 三目运算通常用于替代一些简单的if结构
> ```js
> // 如果exp为真,则把1赋值给n,否则,把2赋值给n
> // 啰嗦的代码
> if(exp){
>   n = 1;
> }
> else{
>   n = 2;
> }
> 
> // 更简洁的代码
> n = exp ? 1 : 2;
> ```


## 布尔判定

所有需要判断真假的地方都会使用下面的规则

| 数据 | 判定  |
|------|-------|
|`false` `null` `undefined` `0` `NaN` `''`| false |
|剩余所有数据| true |

## 类型的隐式转换

每个运算符都有自己期望的数据,比如`*`期望两端都是数字

一旦数据不符合运算符的期望,js就会悄悄的对数据进行类型转换,把它转换成期望的值后进行运算。

值得注意的是,这种转换是 _临时_ 的,并不会对原数据造成影响

> 小贴士
> 在实际的开发中,我们可以利用类型的隐式转换完成以下功能:
> ```js
> var n = +a; // 不管a是啥,都会被转换成数字,保存到n中
> var s = a + ''; // 不管a是啥,都会被转换成字符串,保存到s中
> var b = !!a; // 不管a是啥,都会被转换成boolean,保存到b中
> ```

 




登录后回复

共有1条评论


guopher

/* 
编写一个完美的求和函数:
1. 若两个数据都是普通数字,求和即可
2. NaN的数据需要变为0
3. 其他类型的数据需要转换为数字
*/

function sum(a, b) {
  // code here
  a = +a || 0;
  b = +b || 0;
  return a + b;
}

console.log(sum(1, 2)); // 3

 

2023-06-23 01:29 回复