先来几个题吧:
var num1 = Number("123blue");
var num2 = Number("");
var num3 = Number([]);
var num4 = Number(true);
var num5 = Number(null);
var num6 = Number(undefined);
var num7 = Number("010");
答案:
num1=NaN, num2=0, num3=0, num4=1, num5=0, num6=NaN, num7=10 var num8 = parseInt("010");
var num9 = parseFloat("010");
var num10 = parseInt("123blue");
var num11 = parseInt("");
var num12 = parseInt("22.5");
var num13 = parseFloat("22.0");
var num14 = parseFloat("0xA");
答案:
num8=10(ie8下=8), num9=10, num10=123, num11=NaN, num12=22, num13=22, num14=0
都答对的亲呢就略过本文吧,其他亲们继续往下看~ js数值转换有4种方法:Number(), parseInt(), parseFloat(), 和一元操作符“+”。其中“+”和Number()的转换规则一样。
Number()可用于转换任何数据类型,转换的规则如下:
parseInt()和parseFloat()用于转换字符串,Number()转换字符串过于复杂,parseInt()则相对简单,更适用于字符串的转换。parseInt()有以下几点规则:
1.解析时先查找第一个非空格字符,如果不是数字或+ -,返回NaN,如果是数字,则继续第二个字符,直到解析完所有字符或遇到一个非数字字符。如
2.会把“0x”开头且后跟数字的当作十六进制解析; “0”开头且后跟数字的,在ECMAScript 3 中当作八进制,ECMAScript5忽略前导0当作十进制解析.(所以上题中的num8在ie8-下等于8,而在其他现代浏览器中是10)
3.接收第二个参数,指定使用多少进制。如果是指定了十六进制则字符串可以不带前面的“0x”。如parseInt("A", 16)=16,parseInt("A")=NaN.
parseFloat()和parseInt( )类似,除了下面两点:
1.允许有一位小数点“.”,即解析有效的浮点数。
2.忽略前导0始终按十进制解析,并且十六进制格式的字符串会被转换成0.
字符串如果包含的是整数或者小数点后是0,parseFloat( )返回整数。