为什么我可以将两个字符串与“==”而不是两个字符数组进行比较?

时间:2014-02-16 09:43:27

标签: javascript

例如:

var one = ['H', 'i'];
var two = ['H', 'i'];

(one == two) returns false

(one.join('') == two.join('')) returns true

为什么?

2 个答案:

答案 0 :(得分:3)

如何为字符串和数组定义相等性存在差异 - 如果字符串的内容相同则认为字符串相等,但只有当数组是相同的数组时才认为数组是相等的,否则即使它们的内容匹配也不同。

原因可能有很多原因,例如两个原因:

1)你经常希望数组比较通过整个数组,因为它可能很大并且需要很长时间。所以默认方式不应该是危险的。

2)你可以改变数组内容,同时仍然是'相同'的数组;而javascript字符串是不可变的,因此任何更改的字符串都是一个新的,不同的对象。

答案 1 :(得分:1)

在比较对象时,JS想要查看它们是否是实际相同的对象,而不仅仅是具有相同内容的对象。

我发现下划线的isEqual方法在这里很有用,但是如果你想弄清楚它是如何完成库的,只需看一下下划线核心,这很容易阅读

http://underscorejs.org/#isEqual