update:运算符

This commit is contained in:
qianguyihao 2018-12-21 21:21:47 +08:00
parent eedf81e5e9
commit 7d9ec01651
2 changed files with 65 additions and 15 deletions

View File

@ -193,7 +193,7 @@ parseFloat()和parseInt()的作用类似不同的是parseFloat()可以获
## 转换为Boolean
将其他的数据类型转换为Boolean可以使用**Boolean()**函数。
将其他的数据类型转换为Boolean可以使用Boolean()函数。
- 情况一:数字 --> 布尔。除了0和NaN其余的都是true。

View File

@ -75,7 +75,7 @@
### 算数运算符的注意事项
1当对非Number类型的值进行运算包括`+`、`-`、`*`、`/`会将这些值转换为Number然后在运算。(注:`Number + 字符串`、`字符串 + 字符串`是特例,稍后再讲)
1当对非Number类型的值进行运算包括`+`、`-`、`*`、`/`会将这些值转换为Number然后再运算。(注:`字符串 + Number`、`字符串 + 字符串`是特例,稍后再讲)
比如:
@ -89,9 +89,8 @@
result4 = 100 - '1' // 99
```
另外,我们可以利用这一特点
2任何值和NaN做运算都得NaN。
2任何值和NaN做运算的结果都是NaN。
3任何的值和字符串做加法运算都会先转换为字符串然后再做拼串操作。
@ -103,7 +102,9 @@
result2 = '1' + 2 + 3; // 123
```
我们可以利用这一特点来将一个任意的数据类型转换为String我们只需要为任意的数据类型 + 一个 "" 即可将其转换为String。这是一种隐式的类型转换由浏览器自动完成实际上它也是调用String()函数。
我们可以利用这一特点来将一个任意的数据类型转换为String我们只需要为任意的数据类型 + 一个 "" 即可将其转换为String。这是一种**隐式**的类型转换由浏览器自动完成实际上它也是调用String()函数。也就是说,`c = c + ""` 等价于 `c = String(c)`
4任何值做`-`、`*`、`/`运算时都会自动转换为Number。
@ -159,6 +160,20 @@ sqrt即“square 开方”。比如:
一元运算符,只需要一个操作数。
常见的一元运算符如下。
### typeof
typeof就是典型的一元运算符因为后面只跟一个操作数。
举例如下:
```javascript
var a = '123';
console.log(typeof a); // 打印结果string
```
### 正号 `+`
1正号不会对数字产生任何影响。比如说`2`和`+2`是一样的。
@ -181,7 +196,9 @@ sqrt即“square 开方”。比如:
打印结果:
20180811_2245.png
![](http://img.smyhvae.com/20181221_2050.png)
### 负号 `-`
@ -236,11 +253,11 @@ sqrt即“square 开方”。比如:
逻辑运算符有三个:
- && 与(且):两个都为真,结果才为真
- `&&` 与(且):两个都为真,结果才为真。
- || 或:只要有一个是真,结果就是真
- `||` 或:只要有一个是真,结果就是真
- ! 非:对一个布尔值进行取反。
- `!` 非:对一个布尔值进行取反。
**连比的写法:**
@ -261,6 +278,9 @@ sqrt即“square 开方”。比如:
alert(a>=18 && a<= 65);
```
PS上面的这个`a>=18 && a<= 65`千万别想当然的写成` 18<= a <= 65`啊,没有这种语法。
### 注意事项
1能参与逻辑运算的都是布尔值。
@ -296,8 +316,8 @@ sqrt即“square 开方”。比如:
非布尔值进行**与或运算**时,会先将其转换为布尔值,然后再运算,但返回结果是**原值**。比如说:
```javascript
var result = 1 && 2; // 运算过程true && true;
console.log('result' + result); // 打印结果:2
var result = 5 && 6; // 运算过程true && true;
console.log('result' + result); // 打印结果:6也就是说最后面的那个值。
```
上方代码可以看到,虽然运算过程为布尔值的运算,但返回结果是原值。
@ -306,7 +326,7 @@ sqrt即“square 开方”。比如:
**与运算**的返回结果:(以两个非布尔值的运算为例)
- 如果第一个值为true则必然返回第二个值
- 如果第一个值为true则必然返回第二个值所以说如果所有的值都为true则返回的是最后一个值
- 如果第一个值为false则直接返回第一个值
@ -349,17 +369,47 @@ sqrt即“square 开方”。比如:
!== 不全等于
```
关系运算符得到的结果都是布尔值要么是true要么是false。
**关系运算符得到的结果都是布尔值要么是true要么是false**。
举例如下:
```javascript
var result = 5 > 10; // false
```
### 非数值的比较
1对于非数值进行比较时会将其转换为数字然后再比较。
2特殊情况如果符号两侧的值都是字符串时**不会**将其转换为数字进行比较。比较两个字符串时,比较的是字符串的**Unicode编码**。
举例如下:
```javascript
console.log(1 > true); //false
console.log(1 >= true); //true
console.log(1 > "0"); //true
//console.log(10 > null); //true
//任何值和NaN做任何比较都是false
console.log(10 <= "hello"); //false
console.log(true > false); //true
```
2特殊情况如果符号两侧的值都是字符串时**不会**将其转换为数字进行比较。比较两个字符串时,比较的是字符串的**Unicode编码**。【非常重要,这里是个大坑】
比较字符编码时,是一位一位进行比较。如果两位一样,则比较下一位,所以借用它可以来对英文进行排序。
**注意**:在比较两个字符串型的数字时,一定要先转型。
PS所以说当你尝试去比较`"123"`和`"56"`这两个字符串时,你会发现,字符串"56"竟然比字符串"123"要大。也就是说下面这样代码的打印结果其实是true:(这个我们一定要注意,在日常开发中,很容易忽视)
```javascript
// 比较两个字符串时,比较的是字符串的字符编码,所以可能会得到不可预期的结果
console.log("56" > "123"); // true
```
**因此**:当我们在比较两个字符串型的数字时,**一定一定要先转型**,比如 `parseInt()`
3任何值和NaN做任何比较都是false。