为啥“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 个变量引用同一个对象。在下面的示例中,a
和 b
都指向同一个对象(内存中的相同部分),因此它们是相等的。
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()无法转换???