参照内容来自《JavaScript权威指南》
类型转换
转换和相等性:
(1)"=="等于运算符在判断两个值是否相等时有时会发生类型转换,"==="恒等运算符在判断相等时不会做任何类型转换。
(2)类型转换过程中,转换前的值并不等于转换后的值。
显式类型转换:
(1)显示类型转换可以使用Boolean()、Number()、String()或Object()函数。例如:
Number("3");
String(false);
String(true);
false.toString();
true.toString();
Boolean([ ]);
Boolean(null);
Object(3); //等于new number(3)
(2)除了null和undefined之外任何值都有toString()方法。toString()与String()方法返回的结果一致。
(3)null和undefined直接转换为对象,则会抛出一个类型错误(TypeError)。如果使用Object()函数,则不会抛出异常,它仅简单地返回一个新创建的空对象。
(4)toString()方法可以接收转换基数(范围在2至36之间),toString()方法默认转换为十进制的。例如:
var a = "2";
a1 = a.toString(2); //二进制
a2 = "0" + a.toString(8); //八进制
a3 = "0x" + a.toString(16); //十六进制
隐式转换:
(1)+运算符的操作数中有一个是字符串,则会将其他操作数转换为字符串。
(2)一元“+”运算符将其操作数转换为数字。例如:+a 等价于Number(a)
(3)一元“!”运算符将其操作数转换为布尔值并取反。例如:
!! x // 等价于 Boolean(x). 注意是双叹号,x先转换为true(或者false),然后取反,变为false(或者true),此时已经是布尔值了,所以不用将操作数转换为布尔值,再次取反,还是得到true(或者false)。
对象转换为原始值
(1)所有的对象(包括数组和函数,包装对象)都会转换为true。
(2)所有的对象都会继承两个转换方法,分别是toString()和valueOf()。
toString():
对象包括普通的对象,函数,数组。
对于部分对象:例如:({x:1, y:2}).toString() // => "[object Object]
对于RegExp对象:转换为表示正则表达式直接量的字符串。例如:/\d+/g.toString() // => "/\\d+/g"
对于数组:例如:var a = [11, 12, 13]; a.toString(); // =>"11,12,13"(一个包含逗号的字符串)
对于函数:将用户自定义的函数转换为JavaScript源代码字符串。
例如:(function(x) { f(x); }).toString() // => "function(x) {\n f(x);\n}"
对于日期类:返回了一个可被JavaScript解析的日期和时间字符串。
例如:new Date(2010,0,1).toString() // => "Fri Jan 01 2010 00:00:00 GMT-0800 (PST)"
valueOf():
对于对象:如果对象是复合值(一般情况下对象均为复合值),valueOf()方法默认返回对象本身。数组、函数和正则表达式的valueOf()方法只是简单返回对象本身。日期类定义的valueOf()方法返回自1970年1月1日以来的毫秒数。例如:new Date(2018,5,27).valueOf();
本文深入讲解JavaScript中的类型转换,包括等于运算符与恒等运算符的区别、显式类型转换和隐式类型转换的过程,以及对象如何转换为原始值。通过具体示例帮助读者更好地理解这些概念。
1万+

被折叠的 条评论
为什么被折叠?



