javascript---强制数据类型转换

 

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类型的规则
对象数据类型的转换规则比较复杂,遵循以下步骤
 1)先调用对象自身的valueOf方法,如果该方法返回基本数据类型值类型,数值、字符串或布尔值等的值,则直接对该值使用Number方法,遵循上面原始类型的转换规则进行转换,不再进行后续步骤。
2)如果valueOf方法返回复合类型的值,再调用对象自身的toString方法,如果toString方法返回 基本数据类型值类型, 数值、字符串或布尔值等 的值,则直接对该值使用Number方法,遵循上面原始类型的转换规则进行转换,不再进行后续步骤。
3)如果toString方法返回的是复合类型的值,则报错。
 
对于以上步骤的推敲与验证请参考后面的网址,我这篇学习笔记大多数部分参考的这篇文章: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类型的规则
如果要将对象转为字符串,则是采用以下步骤。
 1)先调用toString方法,如果该方法返回基本数据类型值类型,数值、字符串或布尔值等的值,则直接对该值使用String方法,遵循上面原始类型的转换规则进行转换,不再进行以下步骤。
2)如果toString方法返回复合类型的值,再调用valueOf方法,如果valueOf方法返回 基本数据类型值类型, 数值、字符串或布尔值等 的值,则直接对该值使用String方法,遵循上面原始类型的转换规则进行转换,不再进行以下步骤。 恕我才疏学浅,我不能想到调用toString方法返回复合类型的例子,所以这里都是执行第一步就结束了,没有执行第二步的情况,哪位大牛能举出例子,小妹不胜感激!)
3)如果 valueOf方法返回的是复合类型的值,则报错。
*String方法的这种过程正好与Number方法相反。Number是先调用valueOf方法,String是先调用toString方法。
 
对于以上步骤的推敲与验证同样参考:http://javascript.ruanyifeng.com/grammar/conversion.html
ex:
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值