为啥“123”.split('') 不等于 [1, 2, 3].join('').split('') [重复]

Posted

技术标签:

【中文标题】为啥“123”.split(\'\') 不等于 [1, 2, 3].join(\'\').split(\'\') [重复]【英文标题】: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...?

【问题讨论】:

你不能像那样比较对象 看看这个:***.com/questions/7837456/… 在 JavaScrip 中,数组是对象。虽然内容相同,但它们是不同的对象。 谢谢大家 - 上帝保佑你 【参考方案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(''))

【讨论】:

以上是关于为啥“123”.split('') 不等于 [1, 2, 3].join('').split('') [重复]的主要内容,如果未能解决你的问题,请参考以下文章

C#,字符串“Number”转换为数值等于多少?为啥用Convert。ToDouble()无法转换???

为啥 [1,2,3] 在 Javascript 中不等于自身? [复制]

为啥多维数组的枚举值不等于自身?

循环语句while

为啥双 1.0 等于 int 1?

如果 b = [1, 2, 3, 4] 和 c = [...b],为啥 b 不等于 c?