强制类型转换(显式转换)
强制类型转换是主动使用 Number() 、String() 、Boolean()三个方法将数据类型进行转换。
转换 Boolean
1 | console.log(Boolean())
|
2 | console.log(Boolean(0))
|
3 | console.log(Boolean(1))
|
4 | console.log(Boolean('0'))
|
5 | console.log(Boolean('1'))
|
6 | console.log(Boolean(-0))
|
7 | console.log(Boolean(null))
|
8 | console.log(Boolean(''))
|
9 | console.log(Boolean(true))
|
10 | console.log(Boolean(false))
|
11 | console.log(Boolean(undefined))
|
12 | console.log(Boolean(NaN))
|
13 | console.log(Boolean(Infinity))
|
14 | console.log(Boolean(-Infinity))
|
15 | console.log(Boolean('123123'))
|
16 | console.log(Boolean({}))
|
17 | console.log(Boolean({ name: 'jack', age: 10 }))
|
18 | console.log(Boolean([]))
|
19 | console.log(Boolean([1, 2]))
|
20 | console.log(Boolean(['a', 'b']))
|
转换 Number
Number() 函数把对象的值转换为数字。
如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。
1 | console.log(Number())
|
2 | console.log(Number(0))
|
3 | console.log(Number(1))
|
4 | console.log(Number('0'))
|
5 | console.log(Number('1'))
|
6 | console.log(Number(-0))
|
7 | console.log(Number(null))
|
8 | console.log(Number(''))
|
9 | console.log(Number(true))
|
10 | console.log(Number(false))
|
11 | console.log(Number(undefined))
|
12 | console.log(Number(NaN))
|
13 | console.log(Number(Infinity))
|
14 | console.log(Number(-Infinity))
|
15 | console.log(Number('123123'))
|
16 | console.log(Number({}))
|
17 | console.log(Number({ name: 'jack', age: 10 }))
|
18 | console.log(Number([]))
|
19 | console.log(Number([1, 2]))
|
20 | console.log(Number(['a', 'b']))
|
21 | console.log(Number(new Date()))
|
转换 String
1 | console.log(String())
|
2 | console.log(String(0))
|
3 | console.log(String(1))
|
4 | console.log(String('0'))
|
5 | console.log(String('1'))
|
6 | console.log(String(-0))
|
7 | console.log(String(null))
|
8 | console.log(String(''))
|
9 | console.log(String(true))
|
10 | console.log(String(false))
|
11 | console.log(String(undefined))
|
12 | console.log(String(NaN))
|
13 | console.log(String(Infinity))
|
14 | console.log(String(-Infinity))
|
15 | console.log(String('123123'))
|
16 | console.log(String({}))
|
17 | console.log(String({ name: 'jack', age: 10 }))
|
18 | console.log(String([]))
|
19 | console.log(String([1, 2]))
|
20 | console.log(String(['a', 'b']))
|
21 | console.log(String(new Date()))
|
隐式转换
JavaScript 中我们进行数据比较时要将它们的类型转换为一致在进行比较。而有时编译器会自动转换数据类型,这就是隐式转换。
隐式转换规则
- 当使用 + 运算符时,其中一个是字符串,另外一个也将转换城字符串,此时 + 不再是运算符而是连接符
- 在使用 -、/、* 运算符时,字符串将转为数字。如果字符串不是纯数字就会转成 NaN
- undefined 等于 null
- 字符串和数字比较时,字符串转数字
- 数字为布尔比较时,布尔转数字
- 字符串和布尔比较时,两者转数字
- 对象转数字时,调用 valueOf()
- 对象转字符串时,调用 toString()
- 自定义的 valueOf()和 toString()都存在,会默认调用 valueOf()
- 如果只有 toString(),则调用 toString()
加法
1 | let a = 1 + '2'
|
2 | let b = [] + {}
|
3 | let c1 = [] + 1
|
4 | let c2 = [2] + 1
|
5 | let c3 = [1, 1, 3] + 1
|
6 | let d = [] + []
|
7 | let e = {} + {}
|
8 | let f = {} + 1
|
9 | let g = 1 + true
|
10 | let h = 1 + false
|
11 | let i = 1 + null
|
12 | let j = 1 + undefined
|
13 | let k = 1 + Infinity
|
14 | let l = 1 + ''
|
15 |
|
16 | console.log(typeof a, a)
|
17 | console.log(typeof b, b)
|
18 | console.log(typeof c1, c1)
|
19 | console.log(typeof c2, c2)
|
20 | console.log(typeof c3, c3)
|
21 | console.log(typeof d, d)
|
22 | console.log(typeof e, e)
|
23 | console.log(typeof f, f)
|
24 | console.log(typeof g, g)
|
25 | console.log(typeof h, h)
|
26 | console.log(typeof i, i)
|
27 | console.log(typeof j, j)
|
28 | console.log(typeof k, k)
|
减法
1 | let a = 1 - '2'
|
2 | let b = [] - {}
|
3 | let c1 = [] - 1
|
4 | let c2 = [2] - 1
|
5 | let c3 = [1, 1, 3] - 1
|
6 | let d = [] - []
|
7 | let e = {} - {}
|
8 | let f = {} - 1
|
9 | let g = 1 - true
|
10 | let h = 1 - false
|
11 | let i = 1 - null
|
12 | let j = 1 - undefined
|
13 | let k = 1 - Infinity
|
14 | let l = 1 - ''
|
15 |
|
16 | console.log(typeof a, a)
|
17 | console.log(typeof b, b)
|
18 | console.log(typeof c1, c1)
|
19 | console.log(typeof c2, c2)
|
20 | console.log(typeof c3, c3)
|
21 | console.log(typeof d, d)
|
22 | console.log(typeof e, e)
|
23 | console.log(typeof f, f)
|
24 | console.log(typeof g, g)
|
25 | console.log(typeof h, h)
|
26 | console.log(typeof i, i)
|
27 | console.log(typeof j, j)
|
28 | console.log(typeof k, k)
|
乘法
1 | let a = 1 * '2'
|
2 | let b = [] * {}
|
3 | let c1 = [] * 1
|
4 | let c2 = [2] * 1
|
5 | let c3 = [1, 1, 3] * 1
|
6 | let d = [] * []
|
7 | let e = {} * {}
|
8 | let f = {} * 1
|
9 | let g = 1 * true
|
10 | let h = 1 * false
|
11 | let i = 1 * null
|
12 | let j = 1 * undefined
|
13 | let k = 1 * Infinity
|
14 | let l = 1 * ''
|
15 |
|
16 | console.log(typeof a, a)
|
17 | console.log(typeof b, b)
|
18 | console.log(typeof c1, c1)
|
19 | console.log(typeof c2, c2)
|
20 | console.log(typeof c3, c3)
|
21 | console.log(typeof d, d)
|
22 | console.log(typeof e, e)
|
23 | console.log(typeof f, f)
|
24 | console.log(typeof g, g)
|
25 | console.log(typeof h, h)
|
26 | console.log(typeof i, i)
|
27 | console.log(typeof j, j)
|
28 | console.log(typeof k, k)
|
除法
1 | let a = 1 / '2'
|
2 | let b = [] / {}
|
3 | let c1 = [] / 1
|
4 | let c2 = [2] / 1
|
5 | let c3 = [1, 1, 3] / 1
|
6 | let d = [] / []
|
7 | let e = {} / {}
|
8 | let f = {} / 1
|
9 | let g = 1 / true
|
10 | let h = 1 / false
|
11 | let i = 1 / null
|
12 | let j = 1 / undefined
|
13 | let k = 1 / Infinity
|
14 | let l = 1 / ''
|
15 |
|
16 | console.log(typeof a, a)
|
17 | console.log(typeof b, b)
|
18 | console.log(typeof c1, c1)
|
19 | console.log(typeof c2, c2)
|
20 | console.log(typeof c3, c3)
|
21 | console.log(typeof d, d)
|
22 | console.log(typeof e, e)
|
23 | console.log(typeof f, f)
|
24 | console.log(typeof g, g)
|
25 | console.log(typeof h, h)
|
26 | console.log(typeof i, i)
|
27 | console.log(typeof j, j)
|
28 | console.log(typeof k, k)
|
比较 ==
1 | undefined == null
|
2 | 0 == '0'
|
3 | 0 == false
|
4 | '0' == false
|
5 | null == false
|
6 | undefined == false
|