数值转换
数值转换用到两个函数 Number() 和parseInt()
强制转化 :number()函数
布尔值true/false 解析成1/0
空字符‘’ 解析成0
null 解析成0
undefined 解析成NaN
parseInt()
布尔值true/false 解析成 NaN
空字符‘’ 解析成NaN
null 解析成NaN
undefined 解析成NaN
Number()转换比parseInt严格,前者整体解析,只要出现一个字符无法解析,整个转化就失败。后者逐个解析,只要第一位能解析,就可以解析成数值
例如:Number("34a5") : NaN
Number("a2") : NaN
parseInt("34a5") : 34
parseInt("a2") :NaN
对象转换数值
对象转化数值时候,显示调用自身valueOf()方法,如果返回原始类型(数值,布尔,字符串),则调用Number()函数,如果返回对象,则调用toString()方法,如果返回原始类型值,则对改值Number()方法,如果返回复合类型,则报错。
例子1
if (typeof {a:1}.valueOf() === 'object'){
alert(Number({a:1}.toString())); //NaN
} else {
alert( Number({a:1}.valueOf()));
}
等同于
Number({a:1})
结果:NaN
例子2
var obj = {
valueOf: function () {
console.log("valueOf");
return {};
},
toString: function () {
console.log("toString");
return {};
}
};
Number(obj);
String()函数,强制转化成字符串
如果要将对象转为字符串,则是采用以下步骤。
-
先调用toString方法,如果toString方法返回的是原始类型的值,则对该值使用String方法,不再进行以下步骤。
-
如果toString方法返回的是复合类型的值,再调用valueOf方法,如果valueOf方法返回的是原始类型的值,则对该值使用String方法,不再进行以下步骤。
-
如果valueOf方法返回的是复合类型的值,则报错。