1

开始这个话题之前,我们先看一下下面的几个例子:

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

总的来说,使用方法就是为了转换类型:对象类型->基本类型 然后进行基本类型的操作。


specialcoder
2.2k 声望170 粉丝

前端 设计 摄影 文学