JS是一门弱类型语言,弱类型语言在声明时不需要指定数据类型,而且在运算时会根据需要进行类型的变换。
类型转换分为2种:显式转换(强制类型转换)和隐式转换(自动类型转换)。
1.强制类型转换
Number类型转换:
parseInt() 强制将其他数据类型转换为整型
1.数字开头的字符串被转换成对应的整数
2.数字被转换成对应整数数字
3.其他的都被转换成NaN
parseFloat() 强制将其他数据类型转换为浮点数型
1.数字开头的字符串被转换成对应的浮点数
2.数字被转换成对应浮点数数字
3.其他的都被转换成NaN
Number() 强制将其他数据类型转换为数字类型
1.string 空字符串被转换为0;纯数字的字符串被转换成对应的数字;其他字符串被转换成NaN
2.boolean:true => 1 false => 0
3.undefined => NaN;
4.function=>NaN;
5.object除了null都是NaN;Null => 0;
6.number还是number
注意:浮点数运算并非精确运算,浮点数计算存在偏差问题。(计算机使用的是二进制计算,小数点后面的数字计算不够精确)
字符串类型转换:强制将其他数据类型转换为字符串类型
String() 将其他数据类型转化为字符串类型;
返回的所有数据都是以字符串形式表现,不再具有其他类型的意义。
该方式对任何数据都有效。
布尔值类型转换:强制将其他数据类型转换为布尔值类型
Boolean() 将其他数据类型转化为布尔值
1.string:空字符串被转换为false;其他字符串被转换成true;
2.boolean:true => true false => false;不用转换
3.undefined => false;Null => false
4.number:整数、浮点数=>true;NaN、0、0.0=>false
5.function => 都是true
6.object除了null都是true;Null => false
2.自动类型转换
自动类型转换多发生在运算和判断的过程当中,且不需要人为干预。转换的时候都是向着更为精确的类型转换。
string类型跟任何类型相加都得string类型;
boolean类型和number类型相加都得number类型;
undefined类型跟除了string类型以外的任何类型相加都得NaN.
+加号对字符串有拼接功能,对其他数据类型只有运算功能。
数据类型比较:
NaN 与其他类型比较(包括NaN本身)都为false;
null==undefined //true
null、undefined 与其他类型比较都为false;
boolean 与number、string比较,全都先转为Number类型再比较;
number 与boolean、string比较:boolean、string使用Number()方法先转换为number,再和number比较;
object与string比较,object转string再比较;与number、boolean比较,都转为number再比较;
object与object比较,比较两者是不是同一个内存地址。
var str="你好"; //字符串类型
var num = 10; // 数字类型
console.log(str + num); // 得到的结果为'你好10'
因为两种不同类型的值不能直接运算,需要先转为相同类型才能运算,此时,数字 10 会先自动转换为 '10',然后再跟 '你好' 拼接
var flag = false; // 布尔值类型
console.log(num + flag); // 得到的结果为'10';因为true => 1 false => 0
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>js数据类型转换</title>
</head>
<body>
<script>
var iNum=12;//整数
var fNum=12.42;//浮点数
var num=NaN;//Not a Number,相当于一个提示符,说明运算出错,结果不是一个数字;
var str="";//空字符串
var str1="你好";
var str2="2你好";
var str3="3.58你好";
var str4="4.25.24你好";
var str5="5";
var str6="6.58";
var str7="7.25.24";
var flag=true;//布尔值类型为真
var Flag=false;//布尔值类型为假
var nul=null;//空类型(空对象)
var und=undefined;//未定义类型
// console.log(typeof iNum);//number
// console.log(typeof fNum);//number
// console.log(typeof num);//number
// console.log(typeof str);//string
// console.log(typeof str1);//string
// console.log(typeof str2);//string
// console.log(typeof str3);//string
// console.log(typeof str4);//string
// console.log(typeof str5);//string
// console.log(typeof str6);//string
// console.log(typeof str7);//string
// console.log(typeof flag);//boolean
// console.log(typeof Flag);//boolean
// console.log(typeof nul);//oblect
// console.log(typeof und);//undefined
typeof 输出结果以字符串的形式显示number、string、boolean、object、undefined类型
// console.log(typeof typeof iNum);
// console.log(typeof typeof fNum);
// console.log(typeof typeof num);
// console.log(typeof typeof str);
// console.log(typeof typeof str1);
// console.log(typeof typeof str2);
// console.log(typeof typeof str3);
// console.log(typeof typeof str4);
// console.log(typeof typeof str5);
// console.log(typeof typeof str6);
// console.log(typeof typeof str7);
// console.log(typeof typeof flag);
// console.log(typeof typeof Flag);
// console.log(typeof typeof nul);
// console.log(typeof typeof und);
typeof typeof 输出结果均为string
// console.log(Boolean(iNum));//true
// console.log(Boolean(fNum));//true
// console.log(Boolean(num));//false
// console.log(Boolean(str));//false
// console.log(Boolean(str1));//true
// console.log(Boolean(str2));//true
// console.log(Boolean(str3));//true
// console.log(Boolean(str4));//true
// console.log(Boolean(str5));//true
// console.log(Boolean(str6));//true
// console.log(Boolean(str7));//true
// console.log(Boolean(flag));//true
// console.log(Boolean(Flag));//false
// console.log(Boolean(nul));//false
// console.log(Boolean(und));//false
输出结果为蓝色,且均为布尔值类型
// console.log(String(iNum));//12
// console.log(String(fNum));//12.42
// console.log(String(num));//NaN
// console.log(String(str));//
// console.log(String(str1));//你好
// console.log(String(str2));//2你好
// console.log(String(str3));//3.58你好
// console.log(String(str4));//4.25.24你好
// console.log(String(str5));//5
// console.log(String(str6));//6.58
// console.log(String(str7));//7.25.24
// console.log(String(flag));//true
// console.log(String(Flag));//false
// console.log(String(nul));//null
// console.log(String(und));//undefined
输出结果黑色,均为字符串类型
// console.log(Number(iNum));//12
// console.log(Number(fNum));//12.42
// console.log(Number(num));//NaN
// console.log(Number(str));//0
// console.log(Number(str1));//NaN
// console.log(Number(str2));//NaN
// console.log(Number(str3));//NaN
// console.log(Number(str4));//NaN
// console.log(Number(str5));//5
// console.log(Number(str6));//6.58
// console.log(Number(str7));//NaN
// console.log(Number(flag));//1
// console.log(Number(Flag));//0
// console.log(Number(nul));//0
// console.log(Number(und));//NaN
空字符串、布尔值为假时、空对象被转换为0,布尔值为真时被转换为1,纯数字字符串被转换为对应数字,其他被转换为NaN
// console.log(parseInt(iNum));//12
// console.log(parseInt(fNum));//12
// console.log(parseInt(num));//NaN
// console.log(parseInt(str));//NaN
// console.log(parseInt(str1));//NaN
// console.log(parseInt(str2));//2
// console.log(parseInt(str3));//3
// console.log(parseInt(str4));//4
// console.log(parseInt(str5));//5
// console.log(parseInt(str6));//6
// console.log(parseInt(str7));//7
// console.log(parseInt(flag));//NaN
// console.log(parseInt(Flag));//NaN
// console.log(parseInt(nul));//NaN
// console.log(parseInt(und));//NaN
数字开头的字符串被转换成对应的整数;数字被转换成对应整数数字;其他的都被转换成NaN
// console.log(parseFloat(iNum));//12
// console.log(parseFloat(fNum));//12.42
// console.log(parseFloat(num));//NaN
// console.log(parseFloat(str));//NaN
// console.log(parseFloat(str1));//NaN
// console.log(parseFloat(str2));//2
// console.log(parseFloat(str3));//3.58
// console.log(parseFloat(str4));//4.25
// console.log(parseFloat(str5));//5
// console.log(parseFloat(str6));//6.58
// console.log(parseFloat(str7));//7.25
// console.log(parseFloat(flag));//NaN
// console.log(parseFloat(Flag));//NaN
// console.log(parseFloat(nul));//NaN
// console.log(parseFloat(und));//NaN
数字开头的字符串被转换成对应的浮点数;数字被转换成对应浮点数数字;其他的都被转换成NaN
</script>
</body>
</html>
<script>
document.write('<h2>数据类型转换结果</h2>');
var myDate=true;
if(typeof myDate==='string'){
document.write('输入的数据:var myDate=\''+myDate+'\';<br />');
function myFunc(x){
document.write('自动转换为整数:parseInt(\''+x+'\')='+parseInt(x)+';<br />');
document.write('自动转换为浮点数:parseFloat(\''+x+'\')='+parseFloat(x)+';<br />');
document.write('自动转换为Number类型:Number(\''+x+'\')='+Number(x)+';<br />');
document.write('自动转换为String类型:String(\''+x+'\')=\''+String(x)+'\';<br />');
document.write('自动转换为Boolean类型:Boolean(\''+x+'\')='+Boolean(x)+';<br />');
}
myFunc(myDate);
}else{
document.write('输入的数据:var myDate='+myDate+';<br />');
function myFunc(x){
document.write('自动转换为整数:parseInt('+x+')='+parseInt(x)+';<br />');
document.write('自动转换为浮点数:parseFloat('+x+')='+parseFloat(x)+';<br />');
document.write('自动转换为Number类型:Number('+x+')='+Number(x)+';<br />');
document.write('自动转换为String类型:String('+x+')=\''+String(x)+'\';<br />');
document.write('自动转换为Boolean类型:Boolean('+x+')='+Boolean(x)+';<br />');
}
myFunc(myDate);
}
</script>