obj == JSON.parse(JSON.stringify(obj)) is false
本问题已经有最佳答案,请猛点这里访问。
我看着Chrome中的javascript控制台,发现了一些奇怪的东西,尽管它们看起来是一样的,但
1 2 3 | var obj = {test:'this is a test', another: {omg:'ay dios mio', check:true}}; console.log(obj, JSON.parse(JSON.stringify(obj))); console.log(obj == JSON.parse(JSON.stringify(obj))); |
它们看起来相同,但在检查相等性时返回false。为什么会这样?
它们不相等的原因与返回错误的原因相同:
1 | ({omg:'ay dios mio', check:true}) == ({omg:'ay dios mio', check:true}) |
您不是在比较对象内部的值,而是对象引用。他们会不同的。
因为
1 2 | var a = [ 10 ], b = [ 10 ]; |
然后有两个具有相同值的数组实例,但这并不能使它们成为相同的数组。因此,即使是
因此,如果要比较对象,则必须循环遍历它们,并检查对象的值是否相同。
要比较的函数(从jquery对象等同性借用)
1 2 3 4 5 6 7 8 9 10 11 | $.fn.equals = function(compareTo) { if (!compareTo || this.length != compareTo.length) { return false; } for (var i = 0; i < this.length; ++i) { if (this[i] !== compareTo[i]) { return false; } } return true; }; |
对象正在测试引用。
而基元正在测试值。