【问题标题】:variables with same content are not equal .... why? [duplicate]具有相同内容的变量不相等....为什么? [复制]
【发布时间】:2013-11-13 18:44:28
【问题描述】:

如果两个变量的内容相同,为什么我会收到错误消息?

function A() { return {k:'k'}; }
function B() { return {k:'k'}; }

var a = new A;
var b = new B;

 var s='';

for (prop in a) {
   if (typeof a[prop] != "function") {
       s += "a[" + prop + "] = " + a[prop] + "; ";
   }
}
alert(s);


for (prop in b) {
   if (typeof b[prop] != "function") {
       s += "b[" + prop + "] = " + b[prop] + "; ";
   }
}
alert(s);


alert( a == b ); // false?

http://jsfiddle.net/wZjPg/

即使我同时分配 a 和 b 相同的功能也会发生同样的情况

var obj = {};

function A() { return {k:'k'}; }

var a = new A;
var b = new A;

alert( a == b ); // false?

http://jsfiddle.net/3rzrR/

这里也一样

k={zor:1};
b={zor:1};

alert(k==b); //false

http://jsfiddle.net/5v8BJ/

【问题讨论】:

  • 您在比较对象,而不是属性。

标签: javascript


【解决方案1】:

这是因为对象是通过引用进行比较的。

[] === []; // false

根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

如果两个操作数都是对象,那么 JavaScript 比较内部 当操作数引用同一对象时,引用相等 记忆。

【讨论】:

  • 所以我必须手动检查所有属性?
  • @Sol 当您认为两个对象相同时,您应该定义您的意思,并对其进行测试。例如,您可以检查它们是否具有相同的属性(自己的/自己的+继承的),如果属性是对象,您还必须决定是使用自己的定义还是通过引用来比较它们。
猜你喜欢
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多