javascript能干什么返回列表
上传时间:2015-02-02 内容关键字:
第四课:数据类型的转化
http://javascript.ruanyifeng.com/grammar/conversion.html#toc1
JavaScript是一种松散型语言,变量是没有类型的,可以随时赋予任意值。但是,数据本身和各种运算是有类型的,因此运算时变量需要转换类型。大多数情况下,这种数据类型转换是自动的,但是有时也需要手动强制转换。
1.javascript数据类型强制转化:
一、转化为数值类型:
(1)原始数据转换规则
Number(参数)把任何的类型转化为数值类型:
undefined:转成NaN。
null:转成0。
布尔值:true转成1,false转成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
上面代码的valueOf和toString方法,返回的都是对象,所以转成数值时会报错。
从上面的例子可以看出,valueOf和toString方法,都是可以自定义的。
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方法执行。
- 上一篇:已经没有了
- 下一篇:javascript兼容性总汇