一、ES2015中有四种相等算法
1. 抽象(非严格)相等比较。(==)
2. 严格相等比较。(===)
3. 同值。(Object.is())
4. 同值零。

二、JavaScript提供三种不同的值比较操作
1. 严格相等比较,使用 === 比较符号。(在两者进行比较时,不会执行类型转换)
2. 抽象相等比较,使用 == 比较符号。(在两者进行比较时,会执行类型转换。)
3. Object.is()。(和严格相比较类似,只是对于NaN和+0与-0进行特殊处理)
1. NaN == NaN 返回false,NaN === NaN 返回false,Object.is(NaN, NaN) 返回true。
2. +0 === -0 返回true,+0 == -0 返回true,Object.is(+0, -0) 返回false。

三、非严格相等比较下的类型转换
1. undefined与null和其他类型的值相比较时,都不相等。以至于其他类型在与undefined或者null比较时都不会出现类型转换。
2. 同类型的值相比较时不需要进行类型转换。
3. 引用对象在和其他非undefined、null、引用类型的值相比较时,都会尝试调用 toString和valueOf方法将自身先转换为原始值再参与比较。
4. String类型在与Number、Boolean类型相比较时,会先转成数字再参与比较。
5. Boolean类型再与Number、String、引用类型相比较时,会先转成数字在参与比较。
6. Number类型与其他类型相比较时,不用转换类型。

JS中的相等性判断

相关链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness

发表回复