Spe*_*rds 2 javascript json object
我正在查看Chrome中的JavaScript控制台并注意到一些奇怪的东西,即使它们看起来是一样的,obj并且JSON.parse(JSON.stringify(obj))不一样.这是为什么?
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)));
Run Code Online (Sandbox Code Playgroud)
它们看起来相同,但在检查相等性时返回false.这是为什么?
由于返回false的相同原因,它们不相等:
({omg:'ay dios mio', check:true}) == ({omg:'ay dios mio', check:true})
Run Code Online (Sandbox Code Playgroud)
您不是要比较对象内部的值,而是对象引用.他们会有所不同.
因为obj并没有引用内存中解析的对象。所以这是两个不同的声明。如果你这样做:
var a = [ 10 ],
b = [ 10 ];
Run Code Online (Sandbox Code Playgroud)
然后有两个具有相同值的数组实例,但这并不会使它们成为相同的数组。所以a != b,尽管10 == 10。您可以将 的值增加到a[0]15,但这不会将 的值更改b[0]为 15。
因此,如果要比较对象,则必须循环遍历它们并检查对象的值是否相同。
比较函数(借自jQuery 对象相等性)
$.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;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |