• 微信:
  • hai764003
  • QQ:
  • 511211014
  • E-mail:
  • jaquery@163.com

案例总数51

访问总数312340

收藏总数310871

javascript能干什么返回列表

上传时间:2015-02-02 内容关键字:


第四课:数据类型的转化



http://javascript.ruanyifeng.com/grammar/conversion.html#toc1


JavaScript是一种松散型语言,变量是没有类型的,可以随时赋予任意值。但是,数据本身和各种运算是有类型的,因此运算时变量需要转换类型。大多数情况下,这种数据类型转换是自动的,但是有时也需要手动强制转换。



1.javascript数据类型强制转化


一、转化为数值类型:


1)原始数据转换规则


Number(参数)把任何的类型转化为数值类型


undefined:转成NaN


null:转成0


布尔值:true转成1false转成0


数值:转换后还是原来的值。


字符串:如果可以被解析为数值,则转换为相应的数值,否则得到NaN。空字符串转为0


1.如果字符串中只有数字,转化为10进制(忽略前导0和后导0)数字

Number('0123.0');// 返回123

2.如果是有效的规范的浮点型,转化为浮点值(忽略前导0和后导0)

Number('0123.110');// 返回123.11’

3. 如果字符串中包含有效的十六进制格式,例如”0xf“,则将其转换为相同大小的十进制整数值

4.如果是空字符串,转化为0

5.如果是其他值,返回一个NaN

Number('12px');

Number('asdfasd');  //两个都返回NaN


Number("324") // 324


Number("324abc") // NaN


Number("") // 0


Number(false) // 0


Number(undefined) // NaN


Number(null) // 0


Number函数会自动过滤一个字符串前导和后缀的空格。


Number('\t\v\r12.34\n ')



2)对象的转换规则:


如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再依次按照前面的规则转换返回的字符串值。


对象的转换规则比较复杂。


先调用对象自身的valueOf方法,如果该方法返回原始类型的值(数值、字符串和布尔值),则直接对该值使用Number方法,不再进行后续步骤。


如果valueOf方法返回复合类型的值,再调用对象自身的toString方法,如果toString方法返回原始类型的值,则对该值使用Number方法,不再进行后续步骤。


如果toString方法返回的是复合类型的值,则报错。


Number({a:1})

// NaN


上面代码等同于


if (typeof {a:1}.valueOf() === 'object'){

Number({a:1}.toString());

} else {

Number({a:1}.valueOf());

}


上面代码的valueOf方法返回对象本身({a:1}),所以对toString方法的返回值“[object Object]”使用Number方法,得到NaN


如果toString方法返回的不是原始类型的值,结果就会报错。


var obj = {

valueOf: function () {

console.log("valueOf");

return {};

},

toString: function () {

console.log("toString");

return {};

}

};


Number(obj)

// TypeError: Cannot convert object to primitive value


上面代码的valueOftoString方法,返回的都是对象,所以转成数值时会报错。


从上面的例子可以看出,valueOftoString方法,都是可以自定义的。


Number({valueOf:function (){return 2;}})

// 2


Number({toString:function(){return 3;}})

// 3


Number({valueOf:function (){return 2;},toString:function(){return 3;}})

// 2


上面代码对三个对象使用Number方法。第一个对象返回valueOf方法的值,第二个对象返回toString方法的值,第三个对象表示valueOf方法先于toString方法执行。


 

小海哥推荐你看: 博客园  php教程分享网站  phpmywind  脚本之家