==比较符在js中的规则:趋于数字化(不同数据类型之间的比较,排除掉obj与obj)
obj与obj之间的== 只比较栈中保存的地址值
==操作符解析①
首先把javascript中的数据类型分成两组:
1. String、Number、Boolean和Object(有)
2. Undefined和Null(无)
3. 1与2之间的比较都为false
4. Undefined和Null之间的比较为true
5. NaN 不等于 NaN
null和undefined不得不说的故事(设计者原本的意图)
假如你打算把一个变量赋予对象类型的值,但是现在还没有赋值,
那么你可以用null表示此时的状态(证据之一就是typeof null 的结果是‘object‘)
相反,假如你打算把一个变量赋予原始类型的值,但是现在还没有赋值,
那么你可以用undefined表示此时的状态。
==操作符解析②
parseInt(value)
parseFloat(value)
转换情况
字符串->只要最高位是数字则会转换成数值;否则转换成NaN
其它->NaN
Number()
转换情况
就是把字符串两边的空白字符去掉,然后把两边的引号去掉,看它能否组成一个合法的数字。
如果是,转化结果就是这个数字;否则,结果是NaN。
当然也有例外,比如空白字符串转化为数字的结果是0。
Boolean:true==>1
false==>0
Null==>0
Undefined==>NaN
Object==>NaN
==操作符解析③
从这个例子可以看出,要想掌握==运算的规则,除了牢记两大分类外,还需要记住那些内置对象的toString()和valueOf()方法的规则。
包括Object、Array、Date、Number、String、Boolean等
==操作符解析④
undefined == null,结果是true。且它俩与所有其他值比较的结果都是false。
String == Boolean,需要两个操作数同时转为Number。
String/Boolean == Number,需要String/Boolean转为Number。
Object == Primitive,需要Object转为Primitive(具体通过valueOf和toString方法)。
(Date tostring valueof)