开始这个话题之前,我们先看一下下面的几个例子:
parseInt(0.0000004) // 4
![]==[] //true
['x','y'] == 'x,y' //true
alert({name:'mofei'}) //"[object Object]"
关于parseInt()的方法可以查看我之前的文章。本章主要关注中间两个的结果。
一.String类型转换
1.如果toString方法存在并且返回“原始类型”,返回toString的结果。
2.如果toString方法不存在或者返回的不是“原始类型”,调用valueOf方法,如果valueOf方法存在,并且返回“原始类型”数据,返回valueOf的结果。
3.其他情况,抛出错误。
二:Number类型
当需要使用Number时,( 如Math.sin() )等,解释器会尝试将对象转换成Number对象。
通常有如下的情况会触发Number转换:
1.方法参数需要Number的时候,如Math.sin(obj)等
2.对比的时候,如 obj == 'abc'
3.运算的时候,如 obj + 123
转换规则如下:
1.如果valueOf存在,且返回“原始类型”数据,返回valueOf的结果。
2.如果toString存在,且返回“原始类型”数据,返回toString的结果。
3.其他情况报错。
三:Boolean转换
在进行布尔比较的时候,比如 if(obj) , while(obj)等等,会进行布尔转换。
布尔转换遵循如下规则:
值 布尔值
true/false true/false
undefined,null false
Number0,NaN 对应 false, 其他的对应 true
String"" 对应false, 其他对应true('0'对应的是true)
Object true
举个比较典型的例子:
[] == ![] //true
// 首先第一步右边的是逻辑判断![],所以先转成boolean
// [] == !true
// [] == false
// 左边不是原始类型,尝试把左边转成原始类型,变成
// '' == false
// 转成Number
// 0 == 0
总的来说,使用方法就是为了转换类型:对象类型->基本类型 然后进行基本类型的操作。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。