JavaScript 中,变量可以赋予任何类型的值。但是运算符对数据类型是有要求的,如果运算符发现,运算子的类型与预期不符,就会自动转换类型。数据类型除了可以自动转换以外,还可以手动强制转换。
数据类型的转换
- 强制转换
- 隐式转换
typeof 判断数据类型
typeof操作符是用来检测变量的数据类型。对于值或变量使用typeof 操作符会返回如下字符串。
1 var type=typeof "aaa"; 2 console.log(type);
一:强制转换
1、 强制转换为 - 字符串
1).String() String(数据)
1 var num=10; 2 var a=num.toString(2); 3 console.log(a); 4 console.log(typeof num); 5 console.log(typeof a);
2).toString() .toString(进制)
可以将任意数字转换为任意进制
toString 可以将任意数字转换为任意进制,进制必须大于等于2,小于等于36;
最小是2进制,最大是36进制,因为数字(10)字母(26)共36个;
1 var color=255; 2 var c=color.toString(16); 3 console.log(c); // ff 3).toFixed()
3).toFixed() .toFixed(小数点后几位);
将数值转换为字符串,并按照小数点四舍五入,保留位数,但是有精度误差。
1 var num=10.35; 2 var a=num.toFixed(1);3 console.log(a); //10.3
1 var num=0.5‐0.2; 2 console.log(num==0.3); 3 console.log(0.3‐0.2==0.1);
2、强制转换为 - 数值
Number()
Number(数据)
NaN 非数值 类型是number
1) 纯字符---》 NaN
1 var str="你好"; 2 var num=Number(str); 3 console.log(num); //NaN
2) 纯数字---》数字
1 var str="你好"; 2 var num=Number(str); 3 console.log(num);
3) 部分数字,部分字符---》NaN
1 var str="12"; 2 var num=Number(str); 3 console.log(num);
4) 布尔值---》数字 true--->1 false--->0
1 var str="1a"; 2 var num=Number(str); 3 console.log(num);
5) undefined---》NaN
1 var b=false; 2 var num=Number(b); 3 console.log(num);
6) null---》0
1 var a;
2 var num=Number(a); 3 console.log(num);
3、强制转换为 - 整数
1)parseInt(str)
a:纯字符---》 NaN
1 var str="你好"; 2 var num=parseInt(str); 3 console.log(num); //NaN
b:纯数字---》数字
1 var str="20"; 2 var num=parseInt(str); 3 console.log(str); // num :20
c:部分数字,部分字符---》 通过parseInt转换数值可以从开始转换到字符前为止变成数值,如果第一位是字符,返回NaN
1 var str1="16a";//部分数值部分字符 按照10进制转换16 2 var num=parseInt(str1); 3 console.log(num1); 4 var str2="a16";//部分数值部分字符 NaN 5 var num=parseInt(str2); 6 console.log(num2);
d:布尔值---》NaN
1 var str=false; 2 var num=parseInt(str); 3 console.log(num);
e:undefined---》NaN
1 var str; 2 var num=parseInt(str); 3 console.log(num);
f:null---》NaN
1 var str=null;
2 var num=parseInt(str); 3 console.log(num);
2)parseInt(字符,进制)
可以将指定进制方式字符串转换为10进制,是toString()逆转换
例1:parseInt(str,2); 将2进制字符串转换为10进制数值
1 var str="1010"; 2 var num=parseInt(str,2); 3 // num :10
例2:parseInt(str,16); 将16进制字符串转换为10进制数值
1 var str="FF"; 2 var num=parseInt(str,16); 3 console.log(num); 4 // #FF0000
4、强制转换为 - 小数
parseFloat() 可以保留小数位
强转小数和parseInt类似
1 var str1=25.541; 2 var str2=25.541; 3 var num1=parseInt(str1); 4 var num2=parseFloat(str2); 5 console.log(num1); //25 6 console.log(num2); //25.541
5、强制转换为 - 布尔值
boolen()
1) 转换为false有:
"" 0 false,undefined,null,NaN,转换为布尔值都会变成false
a:“”引号中间没有空格
1 var str1=""; 2 var b=Boolean(str1); 3 console.log(b); //false
b: 0
1 var str2=0; 2 var b=Boolean(str2); 3 console.log(b); //false
c: false
1 var str3=false; 2 var b=Boolean(str3); 3 console.log(b); //false
d: underfind
1 var str4; 2 var b=Boolean(str4); 3 console.log(b); //false
e: null
1 var str5=null; 2 var b=Boolean(str5); 3 console.log(b); //false
f:NaN
1 var str6=NaN; 2 var b=Boolean(str6); 3 console.log(b); //false
2) 除此之外转换都是:true
1 var str="aaa"; 2 var b=Boolean(str); 3 console.log(b); //str
二:隐式转换
- j类型不同,弱类型语言会自动将数据转换为对应的类型
- 当数据类型不相同时,做数据的运算,就会自动将两端的数据转换为相同类型然后运算,这是隐式转换
- 隐式转换遵从与 String() Number() Boolean()
例:加法运算:都转换为字符串运算
1 var a=6; 2 var b="a"; 3 var c=true; 4 console.log(a+b); //6a 5 //这里将a隐式转换为字符串,并且相加首尾相连6 console.log(a+c); // 7
例:减法运算:都转换为数值
1 var a=6; 2 var b="a"; 3 console.log(a‐b); 4 //减法会隐式转换将a和b都转换为数值 NaN 6‐NaN