问题在于以下内容对我来说在逻辑上没有任何意义,也许任何人都可以解释(解释JSON.parse / JSON.stringify确实会做什么也会受到赞赏):
var hello = {norsk: "hei"}, parsedHello = JSON.parse(JSON.stringify(hello));
hello === parsedHello // false
hello == parsedHello // false
typeof(hello) // "object"
typeof(parsedHello) // "object"
hello.norsk === parsedHello.norsk // true
答案 0 :(得分:5)
JS中的对象通过引用进行比较,因为您正在创建全新的对象 - 它们将不相等。
你可以通过字符串化来比较它们:
JSON.stringify(hello) === JSON.stringify(parsedHello)
答案 1 :(得分:2)
您有两个独立的对象恰好包含相同的属性/数据。它们并不相同,因为它们不是同一个对象。
以同样的方式:
var a = {norsk: "hei"};
var b = {norsk: "hei"};
a == b; // false
答案 2 :(得分:0)
Javascript中的两个对象不相等。我建议使用underscore
的isEqual方法来比较对象。您可以在Underscore的GitHub repo https://github.com/jashkenas/underscore/blob/master/underscore.js中找到它,如果您不需要此库中的任何其他内容,则只能使用此特定方法。
答案 3 :(得分:0)
hello
和parsedHello
指向两个单独的对象。您正在比较参考文献,因此这些参考文献并不相同。带有对象的==
和===
不会做“深度平等”;它只比较参考文献。
有关比较JavaScript对象的详细信息,请参阅here。
答案 4 :(得分:0)
比较属性norsk
会给出预期的结果,因为它引用了一个字符串,而JavaScript则根据它们的值来比较字符串,在这种情况下它们是相同的。
不幸的是,以您想要的方式比较复杂对象是一个复杂的事情,称为structural equality
,开箱即用的方法并不容易。