数组比较失败

时间:2013-07-30 01:00:25

标签: javascript arrays json

长话短说。为什么

 console.log(obj.hello[0].w == ['hi','hi']); // false

如下:

var obj = {
'hello':[
    {'w':['hi','hi']}
    ]
}
console.log(obj.hello[0].w);                // ['hi','hi']
console.log(obj.hello[0].w == ['hi','hi']); // false ??? Why is it false?
console.log(obj.hello[0].w[0] == 'hi');     // true
console.log(obj.hello[0].w[0] == ['hi']);   // true
console.log(obj.hello[0].w[0] === ['hi']);  // false
console.log(obj.hello[0].w[0] === 'hi');    // true

如果obj.hello[0].w != ['hi','hi'],那么obj.hello[0].w的“真实”价值是什么?

编辑:我首先想到的问题是关于JSON,但事实证明它是关于比较对象的。对不起,重复一遍。

2 个答案:

答案 0 :(得分:2)

除了@ MightyPork的答案之外,还有一些非常简单的解决方法。

最简单的方法(现代浏览器支持)是使用JSON.stringify()

JSON.stringify(['hi', 'hi')) === JSON.stringify(['hi', 'hi')) // true

如果您的浏览器doesn't support JSON nativley,您可以在网页上添加JSON-js库,其语法相同。

这不是一个完整的解决方案。例如,函数总是返回null,除非它们是类实例。

function a(){ this.val = "something"; }
JSON.stringify([a]) // "[null]"
JSON.stringify([new a]) // "[{"val":"something"}]"

答案 1 :(得分:1)

您无法比较数组,就像它们是简单变量一样。您将对两个不同数组的引用进行比较,无论其内容如何,​​都将始终为false。

如果要进行检查,则必须单独比较每个值。