JS类型转换
这个坑有点深......
js的类型转换有两种 :
一. 显式类型转换 (大摇大摆转换) :
其中的方法有 :
转化为数字
Number(n) :
Number(n) // 结果能是数字的情况: // n是 纯数字, 纯数字字符串, null, 空数组, 一位数组并且是数字或者纯数字字符串, 布尔值
Number(123) 返回123
Number("123") 返回123
Number([]) 返回0
Number([123]) 返回123
Number(['123']) 返回123
Number(null) 返回0
Number(true) 返回1
Number(false) 返回0
// 其他情况会返回NaN
parseInt(n, index)
两个参数, n是要转换的值, index是基底, 即进制
规则和Number大致一样
但是如果是字符串且以数字开头, 比如 '123abc'
截取前面数字并返回 123
parseFloat(n) :
规则和parseInt几乎完全一样, 但是没有进制参数
只是如果碰到小数点, 比如 '123.123.123abc'
她会解析一位小数点 返回 123.123
转化为字符串 :
toString() :
value.toString() // 如果value是 : // 数字, 返回数字字符串 // 布尔值, 返回布尔值字符串 // 字符串不用说 // 对象, 返回[object Object] // 数组, 返回数组的字符串形式 // 函数, 把完整的函数表达式返回
String(n) :
参数传递不一样, 其他和toString()一样
转化为布尔值 :
Boolean() :
转化为false的情况: 空字符串, 数字0, false, undefined, null
其余情况均转化为true
二 . 隐式类型转换 (偷偷摸摸转换, 但还是调用的显式类型转换的方法) :
isNaN()
调用Number()方法, 然后和NaN比对, 如果是NaN返回true, 否则返回false
++ -- + -
调用Number()方法, 然后进行数字操作
+
调用String()方法, 然后进行字符串连接操作
- / * %
调用Number方法, 然后进行数字操作
&& || !
调用Boolean() 方法
< > <= >=
字符串和数字比较, 字符串通过Number()方法优先转化为数字
== !=
双等号比较和转换规则如下(按照步骤进行): ! ! ! ! 比较重要
1. 前后只要有NaN, 一律返回false
2. 前后如果有布尔就将布尔转化为数字
3. 如果有字符串
对方是对象: 对象使用toString()
对方是数字, 字符串转数字
对方是字符串, 直接比较
其他返回false
4. 如果是数字, 对方是对象, 对象取valueOf进行比较, 其他一律返回false
5. null 和 undefined 不进行类型转换, 但他们俩相等
隐式类型转换几乎就是为笔试面试准备的, 工作中最好少用