在JavaScript中,变量可以赋予任何类型的值,但是运算符对数据类型是有要求的,如果运算符发现数据类型不符合要求,就会自动进行隐式类型转换。除了自动进行的隐式类型转换之外,还可以手动强制转换。
一、转换为数值型
1.字符型转为数值型
1.1 Number()
Number()是隐式类型转换的方法,这种方法字符串中只要含有非数值就会转换为NaN。空字符转换为数值型是0。
console.log(Number("4a")); //控制台输出NaN
console.log(Number("")); //0
1.2 parseInt()
parseInt() 方法是将字符型转换为整形数值,从开始位置依次向后转换直到遇到非数值停止,即不识别0-9之外的数字。parseInt(string,radix)可以接收两个参数,分别是待转换的字符和进制,按照后面给定的进制来识别前面的字符并输出一个十进制数。
console.log(parseInt("45.3a6")); //45
console.log(parseInt("45.3a6",16)); //两个参数分别为要转换的字符 和进制。
console.log(parseInt("100",2)); //4
console.log(parseInt("f",16)); //15 按照后面的进制去识别前面的字符,输出的是十进制
数。
1.3parseFloat()
将字符型转换为浮点型,只识别字符串中第一个小数点。不能设置进制。
console.log(parseFloat("4.55.3")); //4.55
2.布尔型转为数值型
用Number()进行隐式转换,true转换为数值为1,false转为数值为0。
console.log(Number(true)); //1
console.log(Number(false)); //0
3.Undefined,Null转为数值型
用Number()进行隐式转换,Undefined转为数值型是NaN,Null转换为数值型是0。
console.log(Number(undefined)); //NaN
console.log(Number(null)); //0
4.Object,NaN转换为数值型
console.log(Number({a:1,b:2})); //NaN
console.log(Number(NaN)); //NaN
console.log(Number({})); //NaN
console.log(Number([])); //0
二、转换为字符型
1.数值转为字符型
1.1 String()隐式类型转换方法
console.log(String(0.000004)); //输出字符型0.000004
console.log(String(2e+2)); //科学技术法表示的数会先转化为十进制表示的数再转换为字符型
1.2 toString()方法
可以将数值按照指定的进制进行强制转换。
console.log(0xff.toString(2)); //11111111 将0xff表示的十六进制数转换为二进制并输出字符串
console.log(07.toString(2)); //111 将07表示的八进制数转换为二进制并输出字符串
1.3 toFixed()
toFixed()可以接收一个参数,表示保留小数点后的位数,一般情况下是遵循四舍五入,但是!但是当保留位数的后一位时5的时候可能会有误差。
console.log(2.556.toFixed(2)); // 2.56
console.log(2.55.toFixed(1)); // 2.5
1.4 toPrecision()
接收一位参数,表示保留的数字的位数。并不是科学计数法。
console.log(0.00000556.toPrecision(2)); //0.0000056
var a = 120056;
console.log(a.toPrecision(2)); //输出 1.2e+5
1.5 toExponential()
科学技术法,接收一位参数,表示保留小数点后几位。
console.log(0.00000556.toExponential(2)); //5.56e-6
1.6 toLocaleString()
console.log(0.00000556.toExponential(2)); //输出0
2.布尔值、null、undefined、NaN转换为字符类型
用String()进行隐式转换
console.log(String(false)); //false
console.log(String(true)); //true
console.log(String(NaN)); //NaN
console.log(String(undefined)); //undefined
3. []、对象转换为字符类型
console.log(String([])); //输出空字符串 ""
console.log(String([1,2,3])); //输出字符串 1,2,3
console.log(String({b:1})); //前一个object表示是一个对象,后一个object表示类型。
三、转换为布尔值
Boolean()隐式类型转换方法。
0, NaN, false, “”, undefined, null这六个转为布尔值为false,其他都为true。
console.log(Boolean(" ")); //空格字符串 true
console.log(Boolean([])); //true
console.log(Boolean({b:1})); //true
注意:
console.log(![] == []); 输出为true。!的运算符优先级高,需要先把[]转换为布尔值为true,![] 就是false。而[]默认调用toString方法转化为字符串,为"", ""再转为布尔值是false,所以![] == []为true。
console.log(![] == []); //true
四、其他数据类型无法转换为undefined,null