【问题标题】:Why could I compare two strings with "==" but not two arrays of chars? [duplicate]为什么我可以用“==”比较两个字符串而不是两个字符数组? [复制]
【发布时间】:2014-02-16 09:43:26
【问题描述】:

例如:

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

(one == two) returns false

但是

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

这是为什么呢?

【问题讨论】:

  • onetwo 是包含相同数据的不同对象。
  • @AustinBrunkhorst 我仍然不明白为什么我所做的事情不起作用。您发布的堆栈帖子提出了如何比较两个字符数组的解决方案,但这不是我要问的。

标签: javascript


【解决方案1】:

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

可能是这样的原因有很多,例如两个原因:

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

2) 您可以在保持“相同”数组的同时更改数组内容;而 javascript 字符串是不可变的,因此任何更改的字符串都是一个新的、不同的对象。

【讨论】:

    【解决方案2】:

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

    我发现 underscore 的 isEqual 方法在这里很有用,但是如果你想弄清楚它是如何在 library free 中完成的,只需看一下 underscores core,它很容易阅读

    http://underscorejs.org/#isEqual

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-16
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      相关资源
      最近更新 更多