javascript有时会自动根据需要将数据类型进行转换,这是我们不能控制的,这是javascript的自动类型转换,之后我也会对这种情况写个学习笔记的博文,现在引出这个,希望能更深的理解强制数据类型转换的主观性。 今天得主角---强制转换主要指使用Number、String和Boolean三个构造函数,是手动将各种类型的值,转换成数字、字符串或者布尔值,是我们主观想法想要让它转换的! Number函数:强制转换成数值 使用Number函数,可以将任意类型的值转化成数字。 (1)原始类型值(数值,字符串,布尔值等基本类型或叫值类型)的转换规则 >数值:转换后还是原来的值。 >字符串:如果可以被解析为数值,则转换为相应的数值,否则得到NaN(了解更多)。空字符串转为0。 >布尔值:true转成1,false转成0。 >undefined:转成NaN。(题外话:所以数值与undefined的任何运算[+、-、*、/]都得到NaN) >null:转成0。 ex: Number("123") // 123 Number("123a") // NaN Number("123.6") // 123.6 Number("123.6.9") // NaN Number("123.6a") // NaN Number(false) // 0 ---布尔值true转为1,false转为0 Number(true) // 1 ---同上 Number(undefined) // NaN --- 要记住哦!以及任何数与undefined的任何运算的结果都是NaN Number(null) // 0 Number("") // 0 ---空字符串转为0 Number(" ") // 0 ---空字符串转为0,前后空格被自动忽略了 Number('\t\v\r12.34\n') // 12.34 ,前后的空格、换行等都被忽略了 (2)对象类型(数组,函数,object{},RegExp等复合数据类型或叫引用类型)转换为Number类型的规则 对象数据类型的转换规则比较复杂,遵循以下步骤
对于以上步骤的推敲与验证请参考后面的网址,我这篇学习笔记大多数部分参考的这篇文章:http://javascript.ruanyifeng.com/grammar/conversion.html ex: Number( {a:1} ) // NaN---首先调用valueOf方法,得到的是对象{a:1}本身,然后调用toString方法得到字符串"[object Object]",再使用Number方法,得到NaN的最终结果 Number( [1,2,3]) // NaN --- 首先数组调用valueOf方法,得到数组[1,2,3]本身,然后调用toString方法得到字符串"1,2,3",再使用Number方法,得到NaN的最终结果 var a = new Number(5); Number(a) // 5---这里a是封装的number类型的对象类型,a先调用valueOf方法,直接得到了基本类型的数据,所以直接按基本数据类型的转换规则得到了5的结果 var a = new String("5");Number(a) // 5---原理同上,差别在于valueOf直接得到了字符串“5” var a = new String(true);Number(a + "2") // 5---原理同上,差别在于valueOf直接得到了字符串“5” String函数:强制转换成字符串 使用String函数,可以将任意类型的值转化成字符串。规则如下: (1)原始类型值(数值,字符串,布尔值等基本类型或叫值类型)的转换规则 >数值:转为相应的字符串。 >字符串:转换后还是原来的值。 >布尔值:true转为“true”,false转为“false”。 >undefined:转为“undefined”。 >null:转为“null ”。 ex: String(123) // "123" var a = 10; a.toString() // 10 var a = 10.0; a.toString() // 10 ---需要注意一下 var a = 10.4; a.toString() // 10.4 String("abc") // "abc" String(true) // "true" String(undefined) // "undefined" String(null) // "null" (2)对象类型(数组,函数,object{},RegExp等复合数据类型或叫引用类型)转换为String类型的规则 如果要将对象转为字符串,则是采用以下步骤。
对于以上步骤的推敲与验证同样参考:http://javascript.ruanyifeng.com/grammar/conversion.html String( {a:1} ) // "[object Object]" ---先调用{a:1}的toString方法直接得到字符串"[object Object]" String( [1,2] ) // "1,2" ---数组调用toSring方法,就是把各项值通过逗号(,)连接成的字符串 String( [] ) // "" --- 空数组没有值,调用toString方法的话自然也不用逗号连接了,直接是空字符 String( /\d+/ ) // "/\d+/" --- 正则调用toString方法,得到正则表达式本身的字符串 String( function(){ alert("a") } ) // "function (){ alert("a") }" --- 函数调用toString方法,即得到函数本身的字符串 Boolean函数:强制转换成布尔值 使用Boolean函数,可以将任意类型的变量转为布尔值。 (1)原始类型值(数值,字符串,布尔值等基本类型或叫值类型)的转换规则 以下六个值的转化结果为false,其他的值 全部 为 true 。 >undefined >null >-0 >+0 >NaN >''(空字符串) ex: Boolean(undefined) // false Boolean(null) // false Boolean(0) // false Boolean(NaN) // false Boolean("") // false Boolean(" ") // true --- 注意哦,Boolean方法不忽略前后空白字符,所以即使一个空格也会返回true (2)对象类型的转换规则 所有对象的布尔值都是true,甚至连false对应的布尔对象也是true。 ex: Boolean(new Boolean(false)) // true --- 充分印证所有的对象转换为布尔值都是true的真理 Boolean( [] ) // true Boolean ( {} ) // true |
Powered by Discuz! X3.2 --© 20011-2015 南充北湖网络有限公司,all rights reserved 技术支持:北湖网络
Archiver | 手机版 | 小黑屋 | 南充北湖网络有限公司
( 蜀ICP备14003946号 )