一、js 隐式转换规则
1. javascript 隐式转换规则
隐式类型转换是在一定场景下,js 运行环境自动调用这几个方法,尝试转换成期望的数据类型
- ToString
- ToNumber
- ToBoolean
- ToPrimitive
注:有关 javascript 隐式转换规则详情,可参考 Javascript基础:隐式类型转换
2.两个数据比较的情况
两个数据比较时,如果两边数据不是同种类型的话,按以下规则进行相应的隐式类型类型转换
- 对象 --> 字符串 --> 数值
- 布尔值 --> 数值
注:有关两个数据相加的情况,可参考 “加号 +” 的运算原理(详细!!!);
有关隐式转换规则的坑点详细分析,可参考 js面试题大坑——隐式类型转换
二、具体分析(六种基本情况 + 三种特殊情况)
1. 对象和字符串比较
① 说明
隐式转换规则:调用 ToPrimitive()
内部函数,将对象转换为字符串,然后两者进行比较。
注:在 js 中,想要将对象转换成原始值,必然会调用 toPrimitive()
内部函数。
① 有关 ToPrimitive()
方法,可参考 JS原始值转换算法—toPrimitive()
① 有关 valueOf()
方法,可参考 JS 中 valueOf() 方法的详解
① 有关 toString()
方法,可参考 有关 toString() 方法的初步认识
② 示例
// 数组(Array)对象和字符串比较
[1,2,3] == '1,2,3' // true
隐式转换过程:
- 对左边的数组对象进行隐式转换
ToPrimitive([1,2,3])
->'1,2,3'
; - 然后和右边的
'1,2,3'
比较,易得结果为true
// Object 对象和字符串比较
let obj = {
a:1}
obj == '[object Obje