南充网络公司_南充网站建设|南充网站设计|南充网站制作|南充网页设计|南充网页制作|南充网页开发|南充网页建设|南充网络公司|南充软件开发【南充北湖网络科技公司官方网站】

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

2015-4-28 15:24| 发布者: aibeihu| 查看: 1309| 评论: 0

摘要: javascript有时会自动根据需要将数据类型进行转换,这是我们不能控制的,这是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

鲜花

握手

雷人

路过

鸡蛋

相关分类

发布主题 官方QQ群
 
 
技术支持
在线客服
北湖网络交流群:
北湖网络
工作时间:
8:00-18:00
 

Powered by Discuz! X3.2 --© 20011-2015 南充北湖网络有限公司,all rights reserved 技术支持:北湖网络

Archiver  |  手机版  |  小黑屋  |  南充北湖网络有限公司 ( 蜀ICP备14003946号  

返回顶部