数据类型转换
- 在js中,隐式数据类型转换大量存在,容易发生错误
- 显示数据类型转换
1. 字符串转为数字
1.1 显示转换
- Number()
- parseInt()
- parseFloat()
Number('100x'); //NaN
parseInt('100x'); //100
Number()中的字符串必须是都是数字,而parseInt和parseFloat则会解析字符串,尽可能转为数字
1.2 隐式转换
'100'-1 //99
+ '100' //100,+号作为单目运算,是正号运算
注意
'100' + 1 // 1001
1 + '100' // 1001
1.3 特殊转换
- 无法被转换为数值的字符串 => NaN
- 空字符串 => 0
2. 数字转为字符串
2.1 显式
String(1); // '1'
1.toString();//'1'
2.2 隐式
foo + '100' //foo100
100 + 'foo' //100foo
2.3 特殊数值
- 数值NaN => 'NaN'
- 数值Infinity => 'Infinity'
- 数值-Infinity => '-Infinity'
3. 转为boolean
3.1 为false的情况
- 0
- NaN
- null
- undefined
- ' '(空字符串)
3.2 !!进行转换
!!'foo' // true
!!0 //false
4. 从Object类型转换为基本数据类型
4.1 Object转为数字
一般情况下,Object类型是无法直接转为数字的。
var obj = {};
obj++;
obj; //NaN
对象要有能返回恰当数值的valueOf方法,则可以
var obj = {};
obj.valueOf = function() {
return 1;
}
obj++;
obj; //2
4.2 Object转为字符串
可以通过改写Object.toString()来实现自己想要的类型转换
4.3 数组类型转为基本数据类型
[] =>
- ''(空字符串)
- 0
- false
[9] =>
- 9
- '9'
- true
5. 数字取整
~是一个按位取非的操作,返回数值的反码,是二进制操作,JavaScript中的number都是double类型的,在位操作的时候会转化为int,两次就还是原来的数
~~3.1415 // 3 等同于parseInt()
~~5.678 //5