mirror of
https://github.com/qianguyihao/Web.git
synced 2024-11-01 05:24:45 +08:00
Compare commits
2 Commits
4635758c40
...
e9a48dd823
Author | SHA1 | Date | |
---|---|---|---|
|
e9a48dd823 | ||
|
10236ab012 |
@ -48,7 +48,7 @@ name = 123; // 强制将变量 name 修改为 数字类型
|
||||
|
||||
### JS 中一共有八种数据类型
|
||||
|
||||
- **基本数据类型(值类型)**:String 字符串、Boolean 布尔值、Number 数值、Undefined 未定义、BigInt 大型数值、Symbol。
|
||||
- **基本数据类型(值类型)**:String 字符串、Boolean 布尔值、Number 数值、Undefined 未定义、Null 空对象、BigInt 大型数值、Symbol。
|
||||
|
||||
- **引用数据类型(引用类型)**:Object 对象。
|
||||
|
||||
|
@ -196,6 +196,16 @@ String(变量/常量);
|
||||
- 对于 Number、Boolean、String、Object 而言,本质上就是调用 toString()方法,返回结果同 toString()方法。
|
||||
- 但是对于 null 和 undefined,则不会调用 toString() 方法。它会,将 undefined 直接转换为 "undefined",将 null 直接转换为 "null"。
|
||||
|
||||
使用String()函数转为字符串的规则如下:
|
||||
|
||||
| 原始值 | 转换后的值 |
|
||||
| ------------------- | ----------------------- |
|
||||
| 布尔值:true、false | 字符串:'true'、'false' |
|
||||
| 数字 | 字符串 |
|
||||
| undefined | 字符串:'undefined' |
|
||||
| null | 字符串:'null' |
|
||||
| 对象 | 字符串:'object' |
|
||||
|
||||
### 3、隐式类型转换:字符串拼接
|
||||
|
||||
如果加号的两边有一个是字符串,则另一边会自动转换成字符串类型进行拼接。
|
||||
@ -228,23 +238,14 @@ console.log(a + 'haha'); // 打印结果:"123haha"
|
||||
const result = Number(变量/常量);
|
||||
```
|
||||
|
||||
**情况一:字符串 --> 数字**
|
||||
使用 Number() 函数转为数字的规则如下:
|
||||
|
||||
(1)如果字符串中的内容是纯数字,则直接将其转换为数字。
|
||||
|
||||
(2)如果字符串是一个**空串**或者是一个**全是空格**的字符串,则转换为 0。
|
||||
|
||||
(3)只要字符串中包含了其他非数字的内容(`小数点`按数字来算),则转换为 NaN。怎么理解这里的 **NaN** 呢?可以这样理解,使用 Number() 函数之后,**如果无法转换为数字,就会转换为 NaN**。
|
||||
|
||||
**情况二:布尔 --> 数字**
|
||||
|
||||
(1)true 转成 1
|
||||
|
||||
(2)false 转成 0
|
||||
|
||||
**情况三:null --> 数字**,结果为:0
|
||||
|
||||
**情况四:undefined --> 数字**,结果为:NaN
|
||||
| 原始值 | 转换后的值 |
|
||||
| ------------------- | ------------------------------------------------------------ |
|
||||
| 字符串 | (1)字符串去掉首尾空格后,剩余字符串的内容如果是纯数字,则直接将其转换为数字。<br/>(2)如果字符串是一个**空串**或者是一个**全是空格**的字符串,则转换为 0。<br/>(3)字符串去掉首尾空格后,剩余字符串包的内容只要含了其他非数字的内容(`小数点`按数字来算),则转换为 NaN。怎么理解这里的 **NaN** 呢?可以这样理解,使用 Number() 函数之后,**如果无法转换为数字,就会转换为 NaN**。 |
|
||||
| 布尔值:true、false | true 转成 1;false 转成 0 |
|
||||
| undefined | NaN |
|
||||
| null | 0 |
|
||||
|
||||
### 2、隐式类型转换——运算符:加号 `+`
|
||||
|
||||
@ -343,23 +344,14 @@ parse 表示“转换”,Int 表示“整数”。例如:
|
||||
parseInt('5'); // 得到的结果是数字 5
|
||||
```
|
||||
|
||||
按照上面的规律,parseInt()的转换结果,列举如下。
|
||||
按照上面的规律,使用 parseInt() 函数转为数字的规则如下:
|
||||
|
||||
**情况一:字符串 --> 数字**
|
||||
|
||||
(1)**只保留字符串最开头的数字**,后面的中文自动消失。
|
||||
|
||||
(2)如果字符串不是以数字开头,则转换为 NaN。
|
||||
|
||||
(3)如果字符串是一个空串或者是一个全是空格的字符串,转换时会报错。
|
||||
|
||||
**情况二:Boolean --> 数字**,结果为:NaN
|
||||
|
||||
**情况三:Null --> 数字**,结果为:NaN
|
||||
|
||||
**情况四:Undefined --> 数字**,结果为:NaN
|
||||
|
||||
---
|
||||
| 原始值 | 转换后的值 |
|
||||
| ------------------- | ------------------------------------------------------------ |
|
||||
| 字符串 | (1)**只保留字符串最开头的数字**,后面的中文自动消失。<br/>(2)如果字符串不是以数字开头,则转换为 NaN。<br/>(3)如果字符串是一个空串或者是一个全是空格的字符串,转换时会报错。 |
|
||||
| 布尔值:true、false | NaN |
|
||||
| undefined | NaN |
|
||||
| null | NaN |
|
||||
|
||||
Number() 函数和 parseInt() 函数的区别:
|
||||
|
||||
@ -491,17 +483,21 @@ parseFloat() 的几个特性,可以参照 parseInt()。
|
||||
|
||||
其他的数据类型都可以转换为 Boolean 类型。无论是隐式转换,还是显示转换,转换结果都是一样的。有下面几种情况:
|
||||
|
||||
(1)情况一:数字 --> 布尔。 0 和 NaN的转换结果 false,其余的都是 true。比如 `Boolean(NaN)`的结果是 false。
|
||||
使用 Number() 函数转为数字的规则如下:
|
||||
|
||||
(2)情况二:字符串 ---> 布尔。空串的转换结果是false,其余的都是 true。全是空格的字符串,转换结果也是 true。字符串`'0'`的转换结果也是 true。
|
||||
| 原始值 | 转换后的值 |
|
||||
| --------- | ------------------------------------------------------------ |
|
||||
| 字符串 | 空串的转换结果是false,其余的都是 true。<br />全是空格的字符串,转换结果也是 true。<br />字符串`'0'`的转换结果也是 true。 |
|
||||
| 数字 | 0 和 NaN的转换结果 false,其余的都是 true。比如 `Boolean(NaN)`的结果是 false。 |
|
||||
| undefined | false |
|
||||
| null | false |
|
||||
| 对象 | 引用数据类型会转换为 true。<br />注意,空数组`[]`和空对象`{}`,**转换结果也是 true**,这一点,很多人不知道。 |
|
||||
|
||||
(3)情况三:null 和 undefined 都会转换为 false。
|
||||
|
||||
(4)情况四:引用数据类型会转换为 true。注意,空数组`[]`和空对象`{}`,**转换结果也是 true**,这一点,很多人不知道。
|
||||
小结:空字符串''、0、NaN、undefined、null会转换为 false;其他值会转换为 true。
|
||||
|
||||
**重中之重来了:**
|
||||
|
||||
转换为 Boolean 的上面这几种情况,**极其重要**,开发中会频繁用到。比如说,我们在项目开发中,经常需要对一些**非布尔值**做逻辑判断,符合条件后,才做下一步的事情。这个逻辑判断就是依据上面的四种情况。
|
||||
转换为 Boolean 的上面这几种情况,**极其重要**,开发中会频繁用到。比如说,我们在项目开发中,经常需要对一些**非布尔值**做**逻辑判断或者逻辑运算**,符合条件后,才做下一步的事情。这个逻辑判断就是依据上面的四种情况。
|
||||
|
||||
举例:(接口返回的内容不为空,前端才做进一步的事情)
|
||||
|
||||
@ -509,10 +505,12 @@ parseFloat() 的几个特性,可以参照 parseInt()。
|
||||
const result1 = '';
|
||||
const result2 = { a: 'data1', b: 'data2' };
|
||||
|
||||
// 逻辑判断
|
||||
if (result1) {
|
||||
console.log('因为 result1的内容为空,所以代码进不了这里');
|
||||
}
|
||||
|
||||
// 逻辑运算
|
||||
if (result2 && result2.a) {
|
||||
// 接口返回了 result2,且 result2.a 里面有值,前端才做进一步的事情
|
||||
console.log('代码能进来,前端继续在这里干活儿');
|
||||
@ -521,6 +519,8 @@ if (result2 && result2.a) {
|
||||
|
||||
这里再次强调一下,空数组`[]`和空对象`{}`转换为 Boolean 值时,转换结果为 true。
|
||||
|
||||
我们在下一篇内容《运算符》中,还会详细讲非布尔值的逻辑运算。
|
||||
|
||||
### 1. 隐式类型转换:逻辑运算
|
||||
|
||||
当非 Boolean 类型的数值和 Boolean 类型的数值做比较时,会先把前者**临时**进行隐式转换为 Boolean 类型,然后再做比较;且不会改变前者的数据类型。举例如下:
|
||||
@ -542,10 +542,6 @@ console.log(0 == true); // 打印结果:false
|
||||
|
||||
使用 Boolean()函数可以显式转换为 Boolean 类型。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 隐式类型转换:isNaN() 函数
|
||||
|
||||
语法:
|
||||
|
@ -396,7 +396,7 @@ PS:上面的`a>=18 && a<= 65`千万别想当然地写成` 18<= a <= 65`,没
|
||||
|
||||
> 之所以重要,是因为在实际开发中,我们经常用这种代码做容错处理或者兜底处理。
|
||||
|
||||
非布尔值进行**与或运算**时,会先将其转换为布尔值,然后再运算,但返回结果是**原值**。比如说:
|
||||
非布尔值进行**与或运算**时,会通过隐式类型转换,先将其转换为布尔值,然后再运算,但返回结果是**原值**。比如说:
|
||||
|
||||
```javascript
|
||||
var result = 5 && 6; // 运算过程:true && true;
|
||||
|
Loading…
Reference in New Issue
Block a user