-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
== 是对JavaScript值的一个比较运算符,首先我们看一下JavaScript值的类型
JavaScript的值类型
- 原始类型(Primitive):Undefined、Null、Boolean、Number和String
- 对象类型(Object)
Undefined类型:只有一个值,undefined
Null类型:只有一个值,null
Boolean类型:有两个值,true、false
Number类型: 值有很多
String类型: 值理论上有无数个
Object类型: 所有对象都有valueOf()和toString()方法,继承自Object,也可能被子类重写
可以分为有值世界和无值世界,如下图
无值世界
- undefined
- null
undefined == null //truenull: 一般表示没有赋值的Object typeof null //Object
undefined: 一般表示没有赋值的原始类型
有值世界
- Object
- String
- Boolean
- Number
首先,如规则2说的,所有有值世界里的比较,最后都要转换为数字比较。
Object → Number
- 计算obj.valueOf(),如果结果为原始类型,则返回此结果;
- 计算obj.toString(),如果结果是原始类型,则返回此结果;
- 抛出异常。
备注:Date类型的对象,会先调用toString()方法,再调用valueOf()方法。
String → Number
规则:
- 去掉空白字符 \r\n\t \v\f
- 去掉引号
例子:
Number('123'); // 123
Number('1.2e3'); // 1200
Number('123abc'); // NaN
Number('\r\n\t123\v\f'); // 123
//例外
Number(''); // 0
Number('\r\n\t \v\f'); // 0Boolean → Number
- true → 1
- false → 0
例子
[''] == false; //true解释:
['']为Object对象,首先使用valueOf(),不是原始类型,继续调用toString(),为空字符串"",Number('')为0,
false也为0,即 0 == 0,所以最终为true。
Metadata
Metadata
Assignees
Labels
No labels