add:运算符的优先级

This commit is contained in:
qianguyihao 2018-12-26 21:08:11 +08:00
parent ccd6d90d83
commit 1eb9f24f80
3 changed files with 119 additions and 36 deletions

View File

@ -535,7 +535,7 @@ border-left-width: 0;
## 我的公众号
想学习<font color=#0000ff>**代码之外的软技能**</font>?不妨关注我的微信公众号:**生命团队**id`vitateam`)。
想学习<font color=#0000ff>**代码之外的软技能**</font>?不妨关注我的微信公众号:**千古壹号**id`qianguyihao`)。
扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外:

View File

@ -3,7 +3,7 @@
> 以下是正文。
我们在[上一篇文章](http://www.cnblogs.com/smyhvae/p/8303507.html)里讲到了JS中**变量**的概念,本篇文章讲一下**运算符**和表达式。
我们在本文件夹的[第二篇](https://github.com/smyhvae/Web/blob/master/03-JavaScript%E5%9F%BA%E7%A1%80/02-%E5%8F%98%E9%87%8F.md)里讲到了JS中**变量**的概念,本篇文章讲一下**运算符**和表达式。
## 前言
@ -27,7 +27,9 @@
- 赋值运算符
- 关系运算符s
- 关系运算符
- 三元运算符(条件运算符)
## 算数运算符
@ -37,7 +39,7 @@
**求余的举例**
假设用户输入345怎么分别得到3、4、5这三个数呢ø
假设用户输入345怎么分别得到3、4、5这三个数呢
**答案**
@ -65,7 +67,7 @@
输出结果为3。
举例2运算符优先级
举例2注意运算符优先级)
```
var a = 1 + 2 * 3 % 4 / 3;
@ -82,13 +84,13 @@
比如:
```javascript
result1 = true + 1; // 2 = 1+ 1
result1 = true + 1; // 2 = 1+ 1
result2 = true + false; // 1 = 1+ 0
result2 = true + false; // 1 = 1+ 0
result3 = 1 + null; // 1 = 1+ 0
result3 = 1 + null; // 1 = 1+ 0
result4 = 100 - '1' // 99
result4 = 100 - '1' // 99
```
@ -99,9 +101,9 @@
比如:
```javascript
result1 = 1 + 2 + '3' // 33
result1 = 1 + 2 + '3' // 33
result2 = '1' + 2 + 3; // 123
result2 = '1' + 2 + 3; // 123
```
我们可以利用这一特点来将一个任意的数据类型转换为String我们只需要为任意的数据类型 + 一个 "" 即可将其转换为String。这是一种**隐式**的类型转换由浏览器自动完成实际上它也是调用String()函数。也就是说,`c = c + ""` 等价于 `c = String(c)`
@ -171,8 +173,8 @@ typeof就是典型的一元运算符因为后面只跟一个操作数。
举例如下:
```javascript
var a = '123';
console.log(typeof a); // 打印结果string
var a = '123';
console.log(typeof a); // 打印结果string
```
@ -183,17 +185,17 @@ console.log(typeof a); // 打印结果string
2我们可以对一个其他的数据类型使用`+`来将其转换为number【小技巧】。比如
```javascript
var a = true;
a = +a; // 注意这行代码的一元运算符操作
console.log('a' + a);
console.log(typeof a);
var a = true;
a = +a; // 注意这行代码的一元运算符操作
console.log('a' + a);
console.log(typeof a);
console.log('-----------------');
console.log('-----------------');
var b = '18';
b = +b; // 注意这行代码的一元运算符操作
console.log('b' + b);
console.log(typeof b);
var b = '18';
b = +b; // 注意这行代码的一元运算符操作
console.log('b' + b);
console.log(typeof b);
```
打印结果:
@ -267,7 +269,7 @@ console.log(typeof a); // 打印结果string
举例1
```
```javascript
console.log(3 < 2 && 2 < 4);
```
@ -302,11 +304,11 @@ PS上面的这个`a>=18 && a<= 65`千万别想当然的写成` 18<= a <= 65`
4如果对**非布尔值**进行逻辑运算,则会**先将其转换为布尔值**,然后再操作。举例:
```javascript
var a = 10;
a = !a;
var a = 10;
a = !a;
console.log(a); // false
console.log(typeof a); // boolean
console.log(a); // false
console.log(typeof a); // boolean
```
上面的例子,我们可以看到,对非布尔值进行`!`操作之后,返回结果为布尔值。
@ -338,6 +340,20 @@ PS上面的这个`a>=18 && a<= 65`千万别想当然的写成` 18<= a <= 65`
- 如果第一个值为false则返回第二个值
实际开发中,我们经常是这样来处理容错的:
当成功调用一个接口后,针对返回的数据 result假设我们用变量a 接收。通常的写法是这样的:(这里我只是举个例子)
```javascript
if (result.resultCode == 0) {
var a = result && result.data && result.data.imgUrl;
}
```
## 赋值运算符
可以将符号右侧的值赋值给符号左侧的变量。
@ -425,11 +441,14 @@ console.log("56" > "123"); // true
console.log("我爱你中国" == "我爱你中国"); //输出结果为true
```
2`== `这个符号并不严谨,会将不同类型的东西,转为相同类型进行比较。例如:
2`== `这个符号并不严谨,会将不同类型的东西,**转为相同类型**进行比较(大部分情况下,都是转换为数字)。例如:
```
console.log("6" == 6); //true
console.log(0 == -0); //true
```javascript
console.log("6" == 6); // 打印结果true。这里的字符串"6"会先转换为数字6然后再进行比较
console.log(true == "1"); // 打印结果true
console.log(0 == -0); // 打印结果true
console.log(null == 0); // 打印结果true
```
3undefined 衍生自 null所以这两个值做相等判断时会返回true。
@ -446,9 +465,21 @@ console.log(NaN == NaN); //false
问题:那如果我想判断 b的值是否为NaN该怎么办呢
答案可以通过isNaN()函数来判断一个值是否是NaN。如果 b 为 NaN则返回true否则返回false。
答案可以通过isNaN()函数来判断一个值是否是NaN。举例:
5如果要保证**完全等于**,我们就要用三个等号`===`。全等不会做类型转换。例如:
```javascript
console.log(isNaN(b)); //false
```
如上方代码所示,如果 b 为 NaN则返回true否则返回false。
### `===`全等符号的强调
如果要保证**完全等于**,我们就要用三个等号`===`。**全等不会做类型转换**。例如:
```javascript
console.log("6" === 6); //false
@ -491,9 +522,54 @@ console.log(NaN == NaN); //false
如果条件的表达式的求值结果是一个非布尔值,会将其转换为布尔值然后再运算。
## 运算符的优先级
运算符的优先级如下:(越往上,优先级越高)
- `.`、`[]`、`new`
- ()
- ++、--
- `!`、`~`、`+`(单目)、`-`(单目)、`typeof`、`void`、`delete`
- `%`、`*`、`/`
- `+`(双目)、`-`(双目)
- `<<`、`>>`、`>>>`
- `<`、`<=`、`>`、`>=`
- `==`、`!==`、`===`
- `&`
- `^`
- `|`
- `&&`
- `||`
- `?:`
- `=`、`+=`、`-=`、`*=`、`/=`、`%=`、`<<=`、`>>=`、`>>>=`、`&=`、`^=`、`|=`
- `,`
备注:你在实际写代码的时候,如果不清楚哪个优先级更高,可以把括号运用上。
## Unicode 编码表
> 这一段中我们来讲引申的内容Unicode编码的使用。
1、在字符串中可以使用转义字符输入Unicode编码。格式如下
```
@ -512,7 +588,8 @@ console.log(NaN == NaN); //false
打印结果:
20181222_1218.png
![](http://img.smyhvae.com/20181222_1218.png)
2、同样我们可以在网页中使用Unicode编码。格式如下
@ -525,10 +602,14 @@ PS我们知道Unicode编码采用的是16进制但是这里的编码
举例如下:
20181222_1226.png
```html
<h1 style="font-size: 100px;">&#9860;</h1>
```
打印结果:
![](http://img.smyhvae.com/20181222_1226.png)
## 我的公众号

View File

@ -16,8 +16,10 @@ PS如果你发现文中的图片加载不出来不妨[看这里](https://g
### 学习交流
我建了一个“前端学习”的微信交流群,目前看来,群里的学习氛围很不错。里面加我微信bootmei拉你进群
我建了一个“前端学习”的微信交流群目前看来群里的学习氛围很不错。加我微信bootmei拉你进群
- 进群暗号:前端学习
- 进群要求:爱分享