JS 的类型转换分为:显式转换隐式转换

1. 显式转换

显式转换常见的方法有:

  • Number将任意类型的值转化为数值
js
Number(324) // 324 // 字符串:如果可以被解析为数值,则转换为相应的数值 Number('324') // 324 // 字符串:如果不可以被解析为数值,返回 NaN Number('324abc') // NaN // 空字符串转为0 Number('') // 0 // 布尔值:true 转成 1,false 转成 0 Number(true) // 1 Number(false) // 0 // undefined:转成 NaN Number(undefined) // NaN // null:转成0 Number(null) // 0 // 对象:通常转换成NaN(除了只包含单个数值的数组) Number({a: 1}) // NaN Number([1, 2, 3]) // NaN Number([5]) // 5
  • parseInt:和 Number 相比,Number 会更严格一些,只要有一个字符无法转换成数值,整个字符串就会被转为 NaN,而 parseInt 函数逐个解析字符,遇到不能转换的字符就停下来例如:
js
Number('32a3') // NaN parseInt('32a3') // 32
  • String可以将任意类型的值转化成字符串
js
// 数值:转为相应的字符串 String(1) // "1" //字符串:转换后还是原来的值 String("a") // "a" //布尔值:true转为字符串"true",false转为字符串"false" String(true) // "true" //undefined:转为字符串"undefined" String(undefined) // "undefined" //null:转为字符串"null" String(null) // "null" //对象 String({a: 1}) // "[object Object]" String([1, 2, 3]) // "1,2,3"
  • Boolean可以将任意类型的值转为布尔值
js
Boolean(undefined) // false Boolean(null) // false Boolean(0) // false Boolean(NaN) // false Boolean('') // false Boolean({}) // true Boolean([]) // true Boolean(new Boolean(false)) // true
  1. 隐式转换

在 JS 中,很多时候会发生隐式转换,我们可以归纳为两种场景:

  1. 比较运算(==!=><)、ifwhile 需要布尔值的地方
  2. 算术运算(+-*/%

上面的场景有个前提就是运算符两边的操作数要是不同一类型的

  • 自动转换为布尔值

在需要布尔值的地方,就会将非布尔值的参数自动转为布尔值,系统内部会调用Boolean函数。

undefined null false +0 -0 NaN "" 这些都会被转化成 false,其他都换被转化成 true

  • 自动转换成字符串

遇到预期为字符串的地方,就会将非字符串的值自动转为字符串

常发生在 + 运算中,一旦存在字符串,则会进行字符串拼接操作

js
'5' + 1 // '51' '5' + true // "5true" '5' + false // "5false" '5' + {} // "5[object Object]" '5' + [] // "5" '5' + function (){} // "5function (){}" '5' + undefined // "5undefined" '5' + null // "5null"
  • 自动转换成数值

除了 + 有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值

js
'5' - '2' // 3 '5' * '2' // 10 true - 1 // 0 false - 1 // -1 '1' - 1 // 0 '5' * [] // 0 false / '5' // 0 'abc' - 1 // NaN null + 1 // 1 undefined + 1 // NaN
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:叶继伟

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!