javascript 的数据类型转换详解
javascript的数据类型转换分为显示类型转换和隐式类型转换
1.显示类型转换
- Number(s) : 转换为数字
var num = Number("123.12"); //num --> 123.12
var num = Number("-123.12"); //num --> -123.12
var num = Number(true); //num --> 1
var num = Number(false); //num --> 0
var num = Number(null); //num --> 0
var num = Number(undefined); //num --> NaN
var num = Number("a"); //num --> NaN
var num = Number("12ab"); //num --> NaN
- parseInt(string,radix) : 转换为整数(去尾法) radix : 2-36进制
//一个参数时,默认为十进制数
var num = parseInt(123.98); //num --> 123
var num = parseInt("123.98"); //num --> 123
var num = parseInt("100px"); //num --> 100
var num = parseInt(true); //num --> NaN
var num = parseInt(false); //num --> NaN
var num = parseInt(null); //num --> NaN
var num = parseInt("a"); //num --> NaN
//两个参数时,第二个参数表示进制,把字符串转换为整数后,
//作为一个该进制的整数,再转化为十进制的数
var num = parseInt("12.98",16); //num --> 18
//12.98 --> 12(16进制) --> 1*16^1 + 2*16^0 = 18
var num = parseInt("11.98",2); //num --> 3
//11.98 --> 11(2进制) --> 1*2^1 + 1*2^0 = 3
var num = parseInt("2a.8",16); //num --> 42
//"2a.8" --> 2a(16进制) --> 2*16^1 + 10*16^0 = 42
- parseFloat(string) : 转换为浮点数
//遇到非数字和非首个小数点的就截去
var num = parseFloat("123.98"); //num --> 123.98
var num = parseFloat("123.98.2"); //num --> 123.98
var num = parseFloat("123abc"); //num --> 123
var num = parseFloat("123.98abc"); //num --> 123.98
- String(s) : 转换为字符串
var num = String(123.12); //num --> "123.12"
var num = String(true); //num --> "true"
var num = String(undefined);//num --> "undefined"
-
toString(radix) : 与String()差不多,用法不一样
注意: undefined 和 null 不能用toString()
var a = 12;
var num = a.toString();// num --> "123"
//radix为目标进制,转化为目标进制的数的字符串形式
var a = 12; //12转换为8进制
var num = a.toString(8);// num --> "14"
- Boolean(s) : 转换为布尔值
//0, null, NaN, undefined, 空字符串"" 都转换为false
var num = Boolean(0); //num --> false
var num = Boolean(null); //num --> false
var num = Boolean(""); //num --> false
var num = Boolean(undefined); //num --> false
var num = Boolean(NaN); //num --> false
//除了以上几个外都转换为true
2.隐式类型转换
隐式类型转换就是javascript内部调用显示类型转换而得到的结果
- isNaN(s) : 内部先调用Number(s)得到的结果再与 NaN比较
var num =isNaN("12ab"); // num --> true
var num =isNaN(undefined); // num --> true
var num =isNaN(null); // num --> false
- ++ / - - 和 +/ - (一元正负号) : 内部先调用Number(),再作运算
var num = "123";
num++; //num --> 124
+ num; //num --> 123
var num = "123abc";
num++; //num --> NaN
- + (加号) : 当加号两侧有一个字符串就会内部调用String()
var str = 2 + "a"; //str --> "2a"
-
- (减号) * (乘号) / (除号) %(取模) :
先符号两边调用Number(),再作运算
var num = "12" - 1; //num --> 11
var num = "12" * 1; //num --> 12
var num = "a" - 1; //num --> NaN
var num = true - 1; //num --> 0
var num = false - 1; //num --> -1
-
> < >= <= : 若一边为字符一边为数字则把字符转换为数字
若两边均为字符则直接比较ASCII码值
var a = "2" > 1; //a --> true;
var a = true >= false; // a--> true;
- == 和 != :先把字符转换为数字
var num = "1" == 1; //num --> true;
var num = "2" != 1; //num --> true;
- 不发生类型转换 : === 和 !== (类型也要相同)
var num = "1" === 1; //num --> false;
- 特殊情况 : null == undefined, NaN != NaN
var a = null == undefined; //a --> true;
var a = NaN == NaN; //a --> false;
大家好,我是LA,萌新一枚,平常主要写一些基础知识加深自己的印象,能和大家分享我也很高兴.我会尽力写一些能帮助到大家的文章,如果文章中有错误的地方,请各位前辈指出,我一定及时改正,希望能在这和大家一起学习,一起成长!