【问题标题】:Why "123".split('') is not equal to [1, 2, 3].join('').split('') [duplicate]为什么“123”.split('') 不等于 [1, 2, 3].join('').split('') [重复]
【发布时间】:2018-09-29 14:37:31
【问题描述】:

这似乎是一个非常基本的问题,但找不到任何关于 SO 的解释。

考虑一下:

var arr = [1, 2, 3];
var str = "123";

function compare(){
  return arr.join('').split('') === str.split('')
}

console.log(compare());
console.log(arr.join('').split(''))
console.log(str.split(''))

不明白为什么控制台会记录false...?

【问题讨论】:

  • 你不能像那样比较对象
  • 在 JavaScrip 中,数组是对象。虽然内容相同,但它们是不同的对象。
  • 谢谢大家 - 上帝保佑你

标签: javascript


【解决方案1】:

因为虽然您要比较的两个数组等价,但它们并不是相同 数组。带有对象的==(和===)检查它们是否是同一个对象

实际上,您拥有的是:

console.log(["1", "2", "3"] == ["1", "2", "3"]);

【讨论】:

  • 哦,对了,引用不一样。现在我懂了。这不是我的错——我大脑的感觉神经元这样做了
【解决方案2】:

您比较两个对象的引用,而不是它们的内容。因为您有 2 个不同的对象,所以它们的引用不相等。

=== 引用类型将返回 true 如果 2 个变量引用同一个对象。在下面的示例中,ab 都指向同一个对象(内存中的相同部分),因此它们是相等的。

const a = {};
const b = a; // assign `a`'s value, which is a reference to the `b`

console.log(a === b);

【讨论】:

    【解决方案3】:

    它们不是同一个数组,它们是单独的对象引用。如果要比较这两个,则将它们字符串化

    var arr = [1, 2, 3];
    var str = "123";
    
    function compare() {
      return (arr.join('').split('')).toString() === str.split('').toString()
    }
    
    console.log(compare());
    console.log(arr.join('').split(''))
    console.log(str.split(''))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2023-03-31
      • 2013-09-13
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      相关资源
      最近更新 更多