check object Equal object javascript
Possible Duplicate:
How do you determine equality for two JavaScript objects?
我要检查两个对象是否不同:
1 2 3 4 5 6 7
| var v1 = {id:"llll", dd="kkkk"};
var v2 = {id:"llll", dd="kkkk"};
if (v1 == v2)
{
alert("lll");
} |
为什么不工作?????
- 请花些时间阅读常见问题解答。
- 我建议使用underline.js:_.isEqual( v1, v2 )。它甚至可以进行深入的比较。
因为对象是通过引用进行比较的:
- 功能
- 对象(宿主对象、本机对象/构造函数和实例)
- 一个常见的实例是{},与new Object类似。
以下对象类型按值而不是参照进行比较:
此外,还有一个对象永远不等于它本身,甚至不通过引用:
1 2 3
| var test = NaN;
alert ( test == NaN ); // false
alert ( test == test ); // false (!) |
要检查两个对象是否相等,必须定义相等:
- "如果两个对象包含相同的属性名和值,则它们是相等的"
这意味着对象A必须具有与对象B相同数量的属性,并且A中的每个属性也必须是B的属性。
- @用户1194313,不,你的问题是"为什么这个不起作用?"你甚至没有花时间正确地写出来。不费吹灰之力就要求代码是不礼貌和不可接受的行为。
- 如果你想要代码,有很多重复的问题。我贴出了这个答案,因为你似乎想知道什么时候物体是相等的。我从来没有见过有人在回答这个问题时提到过NaN,所以我想创建一个。@用户1194313如果您将此问题简化为"给Meh-Teh-Codez比较对象",我将投票结束此问题,将其作为副本(无意冒犯)。
- "在javascript中,一切都是一个对象。"对吗?javascript的原语值呢?快速测试…var s = 'string'; s.foo ="bar"; s.foo; // undefined
- 应为"…以下类型按值比较",而不是"对象类型"。另外,NaN不是一个对象,而是一个数值(尽管它的名称是:))。
- @当然不是羊膜炎。五种基本类型的值不是对象。只有对象类型的值是对象。
- @羊膜炎,我想你指的是,比如说,5 instanceof Object是假的?在我的回答中,"客体"的意思是"一件事"。如果你觉得很困惑,我不介意编辑答案。
- 我听说过"在javascript中,一切都是一个对象。"以前,我不明白人们为什么这么说。也许我遗漏了一些细节?
- @Robw我相信你的意思是"价值"。术语"对象"已经在规范中定义为"对象类型的成员"——请参见此处。5被定义为(数字类型的)值。
- @他们的意思是数组、函数、正则表达式等都是对象。我不会使用那个定义,因为当它放在上下文之外时是模棱两可的。
- @amnotiam JavaScript中的所有原语值都有一个对象表示器,它定义了一组方法。修改String原型时,这些方法也可以在""上使用。然而,"" instanceof String是假的,而"".constructor === String是真的。严格地说,字符串原语不是对象。然而,我的例子表明,在日常语言中,很难判断原语是否是对象。
- 我想我只是不确定调用它们的对象是否有用,即使javascript会为您将它们转换为它们的对象类型。以这句话"下列对象类型是按值比较的,而不是按引用比较的:*字符串…"为例,考虑到这一点,下面的内容似乎应该是正确的…s1 = new String("foo"); s2 = new String("foo"); s1 == s2;…但它不是,只是区别似乎很重要。
尝试使用"=="而不是"=="比较对象。
- 这并不能解决问题。问题是,OP正在比较对象引用,而不是它们的实际值。
- 嗯,哦。我现在明白了。所以为了比较对象,可以对对象的每个值或类似(json.stringify)的值进行比较?
- 您需要做的是调用一个对象的内部equals函数来相等这些对象。这个方法的细节在不同的对象之间会有所不同。对于您定义的对象,您应该重写默认的equals和compareTo方法,以便它们适用于您的对象。