JavaScript数据类型转换

强制类型转换(显式转换)

强制类型转换是主动使用 Number()String()Boolean()三个方法将数据类型进行转换。

转换 Boolean

1
console.log(Boolean()) // false
2
console.log(Boolean(0)) // false
3
console.log(Boolean(1)) // true
4
console.log(Boolean('0')) // true
5
console.log(Boolean('1')) // true
6
console.log(Boolean(-0)) // false
7
console.log(Boolean(null)) // false
8
console.log(Boolean('')) // false
9
console.log(Boolean(true)) // true
10
console.log(Boolean(false)) // false
11
console.log(Boolean(undefined)) // false
12
console.log(Boolean(NaN)) // false
13
console.log(Boolean(Infinity)) // true
14
console.log(Boolean(-Infinity)) // true
15
console.log(Boolean('123123')) // true
16
console.log(Boolean({})) // true
17
console.log(Boolean({ name: 'jack', age: 10 })) // true
18
console.log(Boolean([])) // true
19
console.log(Boolean([1, 2])) // true
20
console.log(Boolean(['a', 'b'])) // true

转换 Number

Number() 函数把对象的值转换为数字。
如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。

1
console.log(Number()) // 0
2
console.log(Number(0)) // 0
3
console.log(Number(1)) // 1
4
console.log(Number('0')) // 0
5
console.log(Number('1')) // 1
6
console.log(Number(-0)) // -0
7
console.log(Number(null)) // 0
8
console.log(Number('')) // 0
9
console.log(Number(true)) // 1
10
console.log(Number(false)) // 0
11
console.log(Number(undefined)) // NaN
12
console.log(Number(NaN)) // NaN
13
console.log(Number(Infinity)) // Infinity
14
console.log(Number(-Infinity)) // -Infinity
15
console.log(Number('123123')) // 123123
16
console.log(Number({})) // NaN
17
console.log(Number({ name: 'jack', age: 10 })) // NaN
18
console.log(Number([])) // 0
19
console.log(Number([1, 2])) // NaN
20
console.log(Number(['a', 'b'])) // NaN
21
console.log(Number(new Date())) // 1625712695975 如果参数是 Date 对象,Number() 返回从 1970 年 1 月 1 日至今的毫秒数

转换 String

1
console.log(String()) //
2
console.log(String(0)) // "0"
3
console.log(String(1)) // "1"
4
console.log(String('0')) // "0"
5
console.log(String('1')) // "1"
6
console.log(String(-0)) // "0"
7
console.log(String(null)) // "null"
8
console.log(String('')) //
9
console.log(String(true)) // "true"
10
console.log(String(false)) // "false"
11
console.log(String(undefined)) // "undefined"
12
console.log(String(NaN)) // "NaN"
13
console.log(String(Infinity)) // "Infinity"
14
console.log(String(-Infinity)) // "-Infinity"
15
console.log(String('123123')) // "123123"
16
console.log(String({})) // "[object Object]"
17
console.log(String({ name: 'jack', age: 10 })) // "[object Object]"
18
console.log(String([])) //
19
console.log(String([1, 2])) // "1,2"
20
console.log(String(['a', 'b'])) // "a,b"
21
console.log(String(new Date())) // Thu Jul 08 2021 11:05:07 GMT+0800 (GMT+08:00)

隐式转换

JavaScript 中我们进行数据比较时要将它们的类型转换为一致在进行比较。而有时编译器会自动转换数据类型,这就是隐式转换。

隐式转换规则

  1. 当使用 + 运算符时,其中一个是字符串,另外一个也将转换城字符串,此时 + 不再是运算符而是连接符
  2. 在使用 -、/、* 运算符时,字符串将转为数字。如果字符串不是纯数字就会转成 NaN
  3. undefined 等于 null
  4. 字符串和数字比较时,字符串转数字
  5. 数字为布尔比较时,布尔转数字
  6. 字符串和布尔比较时,两者转数字
  7. 对象转数字时,调用 valueOf()
  8. 对象转字符串时,调用 toString()
  9. 自定义的 valueOf()和 toString()都存在,会默认调用 valueOf()
  10. 如果只有 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) // string 12
17
console.log(typeof b, b) // string [object Object]
18
console.log(typeof c1, c1) // string 1
19
console.log(typeof c2, c2) // string 21
20
console.log(typeof c3, c3) // string 1,1,31
21
console.log(typeof d, d) // string
22
console.log(typeof e, e) // string [object Object][object Object]
23
console.log(typeof f, f) // string [object Object]1
24
console.log(typeof g, g) // number 2
25
console.log(typeof h, h) // number 1
26
console.log(typeof i, i) // number 1
27
console.log(typeof j, j) // number NaN
28
console.log(typeof k, k) // number Infinity

减法

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) // number -1
17
console.log(typeof b, b) // number NaN
18
console.log(typeof c1, c1) // number -1
19
console.log(typeof c2, c2) // number 1
20
console.log(typeof c3, c3) // number NaN
21
console.log(typeof d, d) // number 0
22
console.log(typeof e, e) // number NaN
23
console.log(typeof f, f) // number NaN
24
console.log(typeof g, g) // number 0
25
console.log(typeof h, h) // number 1
26
console.log(typeof i, i) // number 1
27
console.log(typeof j, j) // number NaN
28
console.log(typeof k, k) // number -Infinity

乘法

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) // number 2
17
console.log(typeof b, b) // number NaN
18
console.log(typeof c1, c1) // number 0
19
console.log(typeof c2, c2) // number 2
20
console.log(typeof c3, c3) // number NaN
21
console.log(typeof d, d) // number 0
22
console.log(typeof e, e) // number NaN
23
console.log(typeof f, f) // number NaN
24
console.log(typeof g, g) // number 1
25
console.log(typeof h, h) // number 0
26
console.log(typeof i, i) // number 0
27
console.log(typeof j, j) // number NaN
28
console.log(typeof k, k) // number Infinity

除法

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) // number 0.5
17
console.log(typeof b, b) // number NaN
18
console.log(typeof c1, c1) // number 0
19
console.log(typeof c2, c2) // number 2
20
console.log(typeof c3, c3) // number NaN
21
console.log(typeof d, d) // number NaN
22
console.log(typeof e, e) // number NaN
23
console.log(typeof f, f) // number NaN
24
console.log(typeof g, g) // number 1
25
console.log(typeof h, h) // number Infinity
26
console.log(typeof i, i) // number Infinity
27
console.log(typeof j, j) // number NaN
28
console.log(typeof k, k) // number 0

比较 ==

1
undefined == null // true
2
0 == '0' // true
3
0 == false // true
4
'0' == false // true
5
null == false // false
6
undefined == false // false

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!