前不久由于一个项目设想的题目,烦心了好几天,为了不留坑拥抱强范例言语特点,照样挑选了’===’作为数据推断是不是相称,关于’==’本日来探讨一下猫腻(弱范例的JavaScript的坑真的太多了,typescript真香)
‘==’ 操纵符
这个操纵符置信学过开辟的人完全不生疏,关于强范例言语我这儿就不做过量形貌,我们这儿就钻JavaScript的牛角尖
x == y,x,y都示意一个值,这个操纵符返回的是bool值true或许false;
关于这个操纵有相对应的比较体式格局(关于一切的JavaScript范例):
1.若type(x)和type(y)雷同,则:
a.若type(x)为undefined,返回true
b.若type(x)为null,返回true
c.若type(x)为number,则:
i.若 x 为NaN,返回false
ii.若 y 为NaN,返回false
iii.若 x , y 为雷同数值,返回true
iv.若 x 为 +0且 y 为 -0,返回true
v.若 x 为 -0且 y 为 +0,返回true
d.若type(x)为string,则当 x , y 完全为雷同字符序列的时刻(长度和雷同位置的字符一样)返回true
e.若type(x)为boolean,当 x , y 同为true返回true,不然返回false
2.若 x 为null且 y 为undefined,返回true
3.若 x 为undefined且 y 为null,返回true
4.若type(x)为number且type(y)为string,返回x == ToNumber(y)的效果
5.若type(x)为string且type(y)为number,返回ToNumber(x) == y的效果
6.若type(x)为boolean,返回ToNumber(x) == y的效果。同理,若type(y)为boolean,返回ToNumber(y) == x的效果
7.若type(x)为string或许number,且type(y)为object,返回x == ToPrimitive(y)的效果。同理,若type(y)为string或许number,且type(x)为object,返回y == ToPrimitive(x)的效果
ToPrimitive是对象转换基础范例的要领。
看个例子:
[] == ![] // true
依据上述划定规矩来剖析:
1.![]为false,上式为: [] == false
2.第6条:上式为: [] == ToNumber(false) => [] == 0,
3.第7条:上式为:ToPrimitive([]) == 0,
4.[].toString() = '',上式为:'' == 0,
5.第4条:上式为:0 == 0 => true