0

长话短说。为什么是

 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 上,但结果证明是比较对象。对不起,重复。

4

2 回答 2

2

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

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

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

如果您的浏览器不支持 JSON nativley,您可以在页面上包含JSON-js库,它具有相同的语法。

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

function a(){ this.val = "something"; }
JSON.stringify([a]) // "[null]"
JSON.stringify([new a]) // "[{"val":"something"}]"
于 2013-07-30T01:15:36.963 回答
1

您不能像数组是简单变量那样比较数组。您正在比较对两个不同数组的引用,无论它们的内容如何,​​这总是错误的。

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

于 2013-07-30T01:04:31.590 回答