Skip to content

Commit a14b577

Browse files
authored
Merge pull request WTFAcademy#5 from 0xb00lean/main
第三讲:常用数据类型
2 parents 115c00d + 7c7db5b commit a14b577

1 file changed

Lines changed: 181 additions & 0 deletions

File tree

03_CommonValueTypes/readme.md

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
# WTF JavaScript 极简教程: 3. Common Value Types
2+
3+
WTF JavaScript 教程,帮助新人快速入门 JavaScript。
4+
5+
**推特**[@WTFAcademy_](https://twitter.com/WTFAcademy_) | [@0xAA_Science](https://twitter.com/0xAA_Science)
6+
7+
**WTF Academy 社群:** [官网 wtf.academy](https://wtf.academy/) | [WTF Solidity 教程](https://github.com/AmazingAng/WTFSolidity) | [discord](https://discord.wtf.academy/) | [微信群申请](https://docs.google.com/forms/d/e/1FAIpQLSe4KGT8Sh6sJ7hedQRuIYirOoZK_85miz3dw7vA1-YjodgJ-A/viewform?usp=sf_link)
8+
9+
所有代码和教程开源在 github: [github.com/WTFAcademy/WTF-Javascript](https://github.com/WTFAcademy/WTF-Javascript)
10+
11+
---
12+
13+
这一讲,我们将介绍 JavaScript 中常用的数据类型:*Number**String**Boolean*
14+
15+
## 1. Number
16+
17+
> 在 JavaScript 中 Number 是一个比较有意思的类型。它既可以声明整数,也可以声明浮点数(小数)。
18+
19+
### 声明 Number 类型变量
20+
21+
```js
22+
let int1 = 10; // 10进制整数
23+
let int2 = 010; // 8进制整数
24+
let int3 = 0x10; // 16进制整数
25+
let float1 = 1.1; // 声明浮点数
26+
let float2 = .1; // 有效,但不推荐
27+
let float3 = 1.1e3; // 科学计数法,结果为1100
28+
```
29+
30+
### 值的范围
31+
32+
Number 类型可表示数的范围非常大,一般情况下不需要担心
33+
34+
```js
35+
console.log(Number.MIN_VALUE); // 可表示最小值,5e-324
36+
console.log(Number.MAX_VALUE); // 可表示最大值,1.7976931348623157e+308
37+
```
38+
39+
**需要注意的是,由于 Number 设计原因,并不适合直接用于高精度计算,在 JavaScript 中有一个库 `BigNumber.js` 专门用于解决这一问题。**
40+
41+
### NaN、Infinity、-Infinity
42+
43+
JavaScript 中有如下三个特殊的数值
44+
45+
1. NaN:表示 “不是数值”,当返回数值的操作失败时会出现,比如 `0 / 0`,可以使用 `isNaN` 函数验证。**注意**:涉及到 NaN的操作始终返回 NaN,其次,每个 NaN 均不相等(NaN != NaN)
46+
47+
2. Infinity:无穷大,表示超出上限的结果,比如 `1 / 0`
48+
49+
3. -Infinity:无穷小,表示超出下限的结果,比如 `-1 / 0`
50+
51+
### 其他类型转换为数值
52+
53+
有三个函数可以其他类型转换为数值:Number()、parseInt()和parseFloat(),Number()可以用于任何数据类型,后面两个函数主要用于将字符串转为数值。
54+
55+
1. Number()函数主要基于如下规则,[在线调试](https://playcode.io/1053488)
56+
57+
- 布尔值,true 转换为1,false 转换为0
58+
59+
- 数值,直接返回
60+
61+
- null,返回 0
62+
63+
- undefined,返回 NaN
64+
65+
- 字符串
66+
67+
- 转换为十进制数值,需要注意的是无法处理八进制,Number('0123') 结果为 123
68+
69+
- 如果字符串包含有效的浮点数格式,则转换为对应的浮点数
70+
71+
- 如果字符串包含十六进制,则转换为十进制返回
72+
73+
- 如果是空字符串,返回 0
74+
75+
- 无效字符会返回 NaN
76+
77+
- 对象,调用 valueOf() 方法,并按照上述规则执行转换。如果转换结果是 NaN,则会调用 toString() 方法,再按照上述规则执行转换。
78+
79+
2. parseInt() 将字符串转为整数时,优先考虑使用此函数,此函数更专注于字符串中是否包含整数,[在线调试](https://playcode.io/1053488?v=2)
80+
81+
- 字符串最前面的空格会被忽略,从第一个非空格字符开始转换,直到字符串末尾或碰到非数值字符
82+
83+
- 如果第一个字符不是数值字符、加号或减号,会立即返回 NaN
84+
85+
- 空字符串会返回 NaN,这点有别于 Number()
86+
87+
- 可以识别十六进制、八进制和十进制
88+
89+
- 可以传入第二个参数用于指定底数(进制数)
90+
91+
3. parseFloat() 与 parseInt() 类似,用于将字符串转换为浮点数,[在线调试](https://playcode.io/1053488?v=3)
92+
93+
- 解析到字符串末尾或无效浮点数字符为止,无效浮点数字符包括第二个出现的小数点
94+
95+
### 常用方法
96+
97+
- Number.isInteger():判断参数是否为整数
98+
99+
- Math.ceil():舍去小数向上进位
100+
101+
- Math.floor():舍去小数向下进位
102+
103+
- Math.round():四舍五入
104+
105+
- Math.random():生成 **[ 0, 1 )** 之间的随机数
106+
107+
- toFixed():限制小数位数,四舍五入,返回值为字符串类型
108+
109+
## 2. String
110+
111+
> String(字符串)类型表示零或多个16位 Unicode 字符序列。可以使用双引号("")、单引号('')或反引号(``)标示。
112+
113+
### 声明 String 类型变量
114+
115+
```js
116+
let str1 = "wtf";
117+
let str2 = 'wtf';
118+
let str3 = `wtf`;
119+
```
120+
121+
### 其他类型转换为字符串
122+
123+
有三种方式可以将其他类型转换为字符串,toString()、String() 和 加号操作符
124+
125+
- toString():可以将数值、布尔值、对象和 *字符串* 转换为字符串。[在线调试](https://playcode.io/1053488?v=4)
126+
127+
- String():如果需要转换的值有可能是 null 或者 undefined 时,可以使用 String()。[在线调试](https://playcode.io/1053488?v=5)
128+
129+
- 用加号操作符给一个值加上一个空字符串也可以将其转换为字符串:`1 + '' = '1'`
130+
131+
### 模板字符串(使用反引号标示)
132+
133+
模板字符串是 JavaScript 中一种很有意思的字符串声明方式,它不仅可以跨行定义字符串,还可以进行字符串插值。
134+
135+
```js
136+
let str = `123
137+
456
138+
789`;
139+
console.log(str);
140+
// 结果会保留换行,得到以下字符
141+
// 123
142+
// 456
143+
// 789
144+
```
145+
146+
*由于模板字符串的这个特性,所以在使用时一定要留意其中的空格和换行符,避免出现问题。*
147+
148+
**模板字符串插值**:这是模板字符串最常用的一个特性,使用 `${}` 可以在其中插入变量并解析。
149+
150+
```js
151+
let num1 = 666;
152+
let str1 = "wtf";
153+
let str2 = `模板字符${num1}串插值${str1}`;
154+
console.log(str2); // 模板字符666串插值wtf
155+
```
156+
157+
所有插入的值都会使用 toString() **强制转换**为字符串
158+
159+
## 3. Boolean
160+
161+
> Boolean 类型用于表示 *真和假* ,有两个字面量值:true 和 false(注意是小写)。
162+
163+
### 其他类型转 Boolean
164+
165+
| 数据类型 | 转换结果为 true | 转换结果为 false |
166+
| --------- | ----------- | ----------- |
167+
| String | 非空字符串 | ""(空字符串) |
168+
| Number | 非零数值(包括无穷值) | 0、NaN |
169+
| Object | 任意非 null 对象 | null |
170+
| Undefined | N/A(不存在) | undefined |
171+
172+
理解以上转换非常重要,因为 JavaScript 在执行流程控制语句时,会自动将其他类型值转换为 Boolean 值,例如下面代码运行后会输出 'true'
173+
174+
```js
175+
let wtf = "WTF School";
176+
if (wtf) {
177+
console.log("true");
178+
} else {
179+
console.log("false");
180+
}
181+
```

0 commit comments

Comments
 (0)