能力有限,水平一般,偏差错误在所难免,例子也不可能那么全面,文章只是个人愚见,对错还需各位自行试验,与君共勉。
javascript一般可以认为有5种基本数据类型:number,boolean,sring,null,undefined;还有一种引用数据类型object。
顺便多嘴说一句,infinity -infinity NaN 都是number类型;
本文把js中常见的数据类型转换分为显示转换和隐式转换;其实它们相互关联,隐式转换也是调用显示转换的规则的。
一、显示转换
1. Number( ) ,parseInt( ) 与 parseFloat( )
Number():把对象的值转换为数字,参数为javascript对象; 如果对象的值无法转换为数字,那么 Number() 函数返回 NaN;
parseInt():解析一个字符串并返回一个整数。有基模式,有两个参数:parseInt(string,radix),其中radix参数可选;
parseFloat():解析一个字符串并返回一个浮点数。没有基模式,只有一个参数:parseFloat(string);
parseFloat()方法与parseInt()方法的处理方式相似,从位置0开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字 符之前的字符串转换成数字。不过,对于这个方法来说,第一个出现的小数点是有效字符。如果有两个小数点,第二个小数点将被看作无效的, parseFloat()方法会把这个小数点之前的字符串转换成数字。这意味着字符串 "22.34.5 "将被解析成22.34。
Number()的强制类型转换与parseInt()和parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。
另外,parseInt([1])==1,这里面涉及到了隐式转换,因为parseInt()的参数需要时string,所以遇到数组[1]时,会先调用数组的toString()方法把它转换为字符串,然后再转换为数字;
关于parseInt()与Number()的差异,请看下图,如果还有不理解的,可以先参照下文隐式转换部分的内容:
2. Boolean()
Boolean(value):把参数转换为boolean类型,参数为一个任意类型的值;
这个比较简单粗暴,在我的认知里,返回false的只有如下值:0,NaN,null,undefined,空字符串。
3. String()
String(object):把对象的值转换为字符串,参数为一个javascript对象;
最简单,把一切转换为字符串,String()和toString()的区别就是:String()能把null和undefined正确转换;而null和undefined却因为没有toString()而……看图吧:
上图为下图所用数组,对象,date和函数;
二、隐式转换
1. == 运算中的隐式转换
回想一下javascript的数据类型,然后参看以下‘==’中的隐式转换规则:
---有布尔值时,先把布尔值转换为数字;
---字符串和数字比较时,把字符串转换为数字;
---null和undefined在==运算中,除了和自身比较返回true,以及null==undefined返回true,它们与任何其他类型均返回false;
---对象(含数组等)与对象比较时,看引用是否为同一个;
---非对象A与对象B比较时,先把对象B转换为字符串,再与A进行比较。
简单粗暴地总结下就是:呃,就是……是时候展现真正的画图技术了:
(特别注意:在==中,字符串和布尔值的比较也是通过数字类型这个中介,和之后介绍的转换要区分开;另外在隐式类型转换中,字符串转换为数字调用的是Number()方法)
2. '+' 与 '-'、'*'、'/'、'<'、'>' 等;
主要分析字符串与数字的以上运算,其实就分两种情形:
+:在+中,会把number自动转换为string类型;
其他:在以上其他运算符运算中,会把string类型自动转换为number类型(应用Number()方法转换)
3.前后置自增‘++’与自减‘--’,以及‘+’与‘-’
与 Number()的转换规则相差无几,前面已经说的比较详细了,下面直接上例子,例子主要针对于 string 类型的转换:
4. 语句中的隐式转换
一般出现在条件语句中,如:if ( something ){········} ;则此时用Boolean()对something进行转换,true就执行;
而如果是if ( value1== value2 ){........};则就要运用==中的运算进行判断,true就执行
才疏学浅,文笔粗陋,见谅,共勉。如果有新的想法,会补充。