obj == JSON.parse(JSON.stringify(obj)) is false
obj == JSON.parse(JSON.stringify(obj)) is false
我在看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)));
它们看起来相同,但当您检查相等时返回false。为什么呢?
它们不相等的原因与此返回false相同:
({omg:'ay dios mio', check:true}) == ({omg:'ay dios mio', check:true})
不是比较对象内部的值,而是比较对象引用。
对象正在测试引用。
当原语在测试VALUE时
因为obj
没有在内存中引用解析过的对象。这是两种不同的声明。如果你这样做:
var a = [ 10 ],
b = [ 10 ];
则有两个具有相同值的数组实例,但这并不使它们成为相同的数组。所以是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;
};
相关文章:
- jQuery匹配JSON对象的部分文本
- TypeError: 使用 Jquery JSON 获取数据时无效的 'in' 操作数 obj
- 无效的“in”操作数 obj JQUERY - 尝试从 JSON 获取数据时出现类型错误
- 创建JSON obj并通过jQuery AJAX将其发送到PHP并响应它
- 我的 json 格式的 OBJ 没有长度是怎么来的
- reverse() on json obj array
- 为什么来自obj.getAttribute的json字符串不想解析
- 从 obj-c 发送带有参数的 JSON 请求
- 将字符串转换为 JSON obj 或数组 JavaScript
- 在 Angular 项目中迭代 JSON 响应以创建新的 $scope obj 我可以在应用程序中使用的
- 存储后获得草坪椅JSON Obj
- 检查通过服务器内联加载的现有JSON obj,以确定工厂是否应该调用以获取相同的obj'还不存在
- Javascript Json Obj动态数组变量名称
- KnockoutJs将JSON obj绑定到嵌套的ViewModel,并且不忽略ViewModel与JSON obj不对
- 发送json obj到聚合物元素
- obj == JSON.parse(JSON.stringify(obj)) is false
- 从JSON中删除项目,'reset'索引从json obj - jquery
- 控制器不接收从json.stringfy(obj)传递的值
- 将解析的 JSON 另存为 obj
- Javascript google api调用-如何添加“url丢失”如果响应中没有图片url,则返回json obj