JS不要使用 == 比较数组

不要使用 == 比较数组

JavaScript 中的数组与其它编程语言的不同,不应该使用 == 运算符比较 JavaScript 中的数组。

该运算符不会对数组进行特殊处理,它会像处理任意对象那样处理数组。

让我们回顾一下规则:

仅当两个对象引用的是同一个对象时,它们才相等 ==

如果 == 左右两个参数之中有一个参数时对象,另一个参数是原始类型,那么该对象将会被转换为原始类型,转换规则如 对象——原始值转换 一章所述。

null undefined 相等 == ,且各自不等于任何其他的值。


严格比较 === 更简单,因为它不会进行类型转换。

所以,如果我们使用 == 来比较数组,除非我们比较的是两个引用同一数组的变量,否则它们永远不相等。

例如:

alert( [] == []);    //false

alert([0] == [0]);    //false

从技术上讲,这些数组是不同的对象。所以它们不相等。 == 运算符不会进行逐项比较。

与原始类型的比较也可能会产生看似很奇怪的结果:

alert(0 == []);    //true

alert('0' == []);    //false

在这里两个例子中,我们将原始类型和数组对象进行比较。因此,数组 [] 被转换为原始类型以进行比较,被转换成了一个空字符串 ‘’

然后,接下来的比较就是原始类型之间的比较,如 类型转换 一章所述:

//在 [] 被转换为 ‘’ 后

alert(0 == '');    //true,因为 ‘’ 被转换成了数字 0

alert('0' == '');    //flase,没有进一步的类型转换,是不同的字符串


那么,我们应该如何对数组进行比较呢?

很简单,不要使用 == 运算符。而是,可以在循环中或者下一章中我们将介绍迭代方法逐项地比较它们。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容