标签:style blog color io os 使用 ar java strong
JavaScript是一门动态类型语言,变量是没有类型的,可以随时赋予任意值。但数据本身和运算是区别类型的。因此需要进行数据类型转化,有些转换是自动进行的,有些转换则需要强制转化。
强制转化使用三个构造函数:Number、String和Boolean,手动将各种类型的值转化为数字、字符串或者布尔值。
原始类型值的转换规则
1)数值:转换后还是原来的值
2)布尔值:true转化为1,false转化为0
3)undefined:转化为NaN
4)null:转化为0
5)字符串:转换规则较多,如下所示:
------如果字符串中只包含数字,转化为相应的十进制数值。eg:"1"转化为1,"123"转化为123,而"011"转化为11(忽略前导0);
------如果字符串中包含有效的浮点格式,转化为浮点数。eg:"12.3"转化为12.3(也会忽略前导0);
------如果字符串为空字符"",返回0;------如果字符串中包含有效的十六进制格式,如"0xf",返回对应的十进制数值(由于忽略前导0,不能识别八进制数值);
------除上述规则外,其它情况下返回NaN。
eg: console.log(Number("123")); "123abc"--->NaN、""--->0、"0xf"--->15、undefined--->NaN、null--->0、false--->0;
console.log(Number("\t\r\v12.34\n ")); //12.34(Number函数会自动过滤一个字符串前导和后缀中的空格)
对象的转换规则
1)首先调用对象自身的valueOf方法,如果结果为原始类型的值(数值、字符串或布尔值),再对该值使用Number函数
2)如果valueOf方法返回复合类型的值,则调用对象自身的toString方法,如果结果为原始类型的值,再对该值使用Number函数
3)如果toString方法返回的是复合类型的值,则报错
eg:Number({a:1}); //NaN
上面代码的执行过程如下:
上面代码分析如下:首先调用对象的valueOf方法,返回对象本身{a:1},所以toString方法的返回值"[Object Object]"使用Number函数,结果为NaN。
如果toString方法返回的是复合类型的值,则会报错。TypeError: Cannot convert object to primitive value
上述代码中,valueOf方法和toString方法返回的都是对象,因此转换时出错。
上述代码的执行结果分别是:2,3,3。第一个对象返回valueOf方法的值,第二个对象返回toString方法的值,第三个对象表示valueOf方法先与toString方法执行。
******在chrome console中运行{a:1}.valueOf(); 报错:"SyntaxError: Unexpected token . ",这是由于{}被js引擎解析为代码块,它是没有valueOf方法。
******valueOf()返回对象的原始值,
var o = {a:1}; o.valueOf(); // Object {a: 1}
var o = {a:1}; o.toString(); //"[object Object]"
[1,2,3].valueOf(); //[1.2.3]
"hello".valueOf(); //"hello"
var n = 123; a.valueOf(); //123 (在这个情况中,若直接使用123.valueOf();会报错:"SyntaxError: Unexpected token ILLEGAL ")
true.valueOf(); //true;
标签:style blog color io os 使用 ar java strong
原文地址:http://www.cnblogs.com/sun-mile-rain/p/4026912.html