在js的使用中,常常会遇到 数据类型的转换。下面来描述一下数据类型之间转换的规则。函数
1、Boolean类型的转换测试
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | 空字符串('') |
Number | 任何非零数字(包换无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | undefined |
2、Number类型spa
1.Number 对象属性(部分)code
//Number 对象属性(部分) alert(Number.MIN_VALUE);//最小值 alert(Number.MAX_VALUE);//最大值 alert(Number.POSITIVE_INFINITY);//Infinity(正无穷) alert(Number.NEGATIVE_INFINITY);//-Infinity(负无穷) //NaN //说明:能够经过 Number.NaN获得NaN值,任何与NaN进行运算的结果均为NaN,NaN与自身不相等,且不与任何值相等。 alert(Number.NaN);//NaN alert(NaN+1);//NaN alert(NaN==NaN);//false
2.Number 判断 (部分)对象
//Number 判断 (部分) //isFinite()函数 若是没有超出返回 true,若是已经超出返回 false var num=10; alert(isFinite(num));//true alert(isFinite(100e10000));//false //isNaN()函数 在接收到一个值的时候,会尝试转换为数值,若是不能转换为数值,返回true,能转换则返回false alert(isNaN(NaN));//true alert(isNaN(25));//false alert(isNaN('25'));//false alert(isNaN('12lee'));//true //说明他的转换可能 用的是Number()强制转换 alert(isNaN(true));//false //isNaN()也能够适用于对象,在调用时,会先调用ValueOf()方法,而后肯定返回值是否能转换成数值,若是 不能,则基于这个返回值再调用toString()方法,再测试返回值 /*var num2={ na:function(){ //return '123'; return 123 } }; //alert(isNaN(num2));//true//这个由于没有调用因此返回true alert(isNaN(num2.na()))//false*/ var num3={ toString:function(){ return '123'; } }; alert(isNaN(num3));//false //说明:toString是一个比较特殊的属性,在这里会直接调用toString()方法,因此和第一个例子不同
3.Number 类型转换 ci
有三种方法:Number()、parseInt()、parseFloat()字符串
(1)Number()string
//Number()函数是转型函数 ,能够用于任何数据类型的转换,可是不精确 alert(Number(true));//1 Boolean类型: true为1 false为0 alert(Number(25));//25 Number类型:原值输出 alert(Number(null));// 0 Null类型:返回0 alert(Number(undefined));//NaN Undefined类型:返回NaN alert(Number('123l'));//NaN string类型只要有一个非数字,无论在前仍是在后,都会返回NaN;若是是全是数字字符串则会按照十进制来转换,前导(第一位)为0,则去掉0;浮点小数为直接转成浮点小数,这两点和下面的parseInt()和parseFloat()不同!!! alert(Number(num3));// 123 Object类型:会调用valueOf()方法,而后肯定返回值是否可以转换为数值,若是转换的结果 是NaN,则基于这个结果再调用toString()方法,再测试返回值
(2)parseInt()it
//parseInt()整型转型函数 主要是针对字符串的转换 //若是字符串中第一位是数字 ,则会返回这个数字直到碰到非数字中止;若是第一位就是非数字,则返回 NaN;若是为空,则返回 NaN alert(parseInt(''));//NaN 空返回NaN 和Number()函数不一样,该函数返回0 //parseInt(string, radix)有两个参数,第一个为字符串,第二个是进制(2,8,10,16) //说一个比较 特殊的,若是字符串前导为0,则后面要加进制,不然会默认为8进制,例以下; alert(parseInt('070'));//70 alert(parseInt('070',8));//56 var iNum1 = parseInt("010"); //返回 8 var iNum2 = parseInt("010", 8); //返回 8 var iNum3 = parseInt("010", 10); //返回 10 alert(iNum1+','+iNum2+','+iNum3);//10,8,10 //这是从w3c上看到的,多是兼容性问题吧,在谷歌中,默认都是十进制;在IE中,会输出 8,8,10 因此为了兼容性,前导为0的后面要加上进制
(3)parseFloat()io
//parseFloat()用于浮点数值转换。从第一位解析到非浮点数值的位置,但只认一个小数点,且不认16进制 alert(parseFloat('123c'));//123 遇到非数字中止,开始若是非数字 则返回 NaN alert(parseFloat('0XA'));//0 不认识16进制 alert(parseInt('0xA'));//10 alert(parseFloat('123.4.5'));//123.4 //只认一位小数点 alert(parseFloat('0123.4000.1'));//123.4 //去掉先后导 alert(parseFloat('1.234e7'));//12340000 //把科学计数法转成普通 数值 alert(parseInt('1.234e7'));//1 //遵循自身的规则 遇到非数字中止
3、String类型
//String类型 toString()方法、String()方法 //字符串类型在转换时,有两个比较 特殊 的注意一下:null和undefined var str1=null; var str2=undefined; alert(typeof str1);//object alert(typeof str2);//undefined alert(String(str1));//null alert(typeof String(str1));//string //alert(str1.toString());//报错了呀 Cannot read property 'toString' of null //alert(toString(str1));//[object Undefined];对象未定义 //alert(str2.toString());//Cannot read property 'toString' of undefined //alert(toString(str2));//[object Undefined];对象未定义 //以上说明:纯粹的Null类型和Undefined类型是没有toString()方法的。但若是值有toString()方法,则调用该方法并返回相应的结果 ,若是 是null或者undefined,则返回“null”或者"undefined"。不过这个目前我也不太清楚,试试对象吧 var box1={ toString:function(){ return null; } } alert(box1);//null