Javascript 实例相等性检查返回false?

Javascript 实例相等性检查返回false?,javascript,javascript-objects,equality,Javascript,Javascript Objects,Equality,我用JavaScript创建了一个简单的向量类,其中包含一个构造函数和一些方法。add方法返回一个新的向量实例。将add方法的返回值与使用相同值声明的新实例进行比较时,将返回false。我还尝试将相等运算符更改为双相等,因此我认为问题与引用无关 类向量{ 构造器(组件){ this.length=components.length; 本节内容=组件; } 加(向量){ if(this.length==vector.length){ 设a=[]; this.contents.forEach((c

我用JavaScript创建了一个简单的向量类,其中包含一个构造函数和一些方法。add方法返回一个新的向量实例。将add方法的返回值与使用相同值声明的新实例进行比较时,将返回
false
。我还尝试将相等运算符更改为双相等,因此我认为问题与引用无关

类向量{
构造器(组件){
this.length=components.length;
本节内容=组件;
}
加(向量){
if(this.length==vector.length){
设a=[];
this.contents.forEach((cur,index)=>
a、 推送(cur+vector.contents[索引])
);
返回新向量(a);
}
投掷误差;
}
减法(向量){
if(this.length==vector.length){
设a=[];
this.contents.forEach((cur,index)=>
a、 push(cur-vector.contents[索引])
);
返回新向量(a);
}
投掷误差;
}
点(矢量){
返回此.contents.reduce(
(acc,cur,index)=>(acc+=cur*vector.contents[索引],
0
);
}
范数(){
返回此.contents.reduce((acc,cur)=>(acc+=Math.pow(cur,2)),0);
}
等于(向量){
返回this.contents==vector;
}
toString(){
返回此.contents.toString();
}
}
设a=新向量([10,20,30]);
设b=新向量([5,15,25]);
log(新向量([15,35,55]);
console.log(a.add(b));
//为什么下面的日志返回false?

log(新向量([15,35,55])==a.add(b))使用
==
比较数组时,您正在比较它们的地址。请查看:

> a = [1,2]
[ 1, 2 ]
> b = [1,2]
[ 1, 2 ]
> a === b
false
如果要检查数组是否包含相同的元素,可以遍历所有元素并进行比较。看


顺便说一下,您还应该编写
throw**new**Error()
(不带星号)。

使用
===
比较数组时,您正在比较它们的地址。请查看:

> a = [1,2]
[ 1, 2 ]
> b = [1,2]
[ 1, 2 ]
> a === b
false
如果要检查数组是否包含相同的元素,可以遍历所有元素并进行比较。看


顺便说一句,您还应该编写
throw**new**Error()
(不带星号)。

如果要测试对象的相等性,您不应该将两个不同的对象与
=
==
进行比较(另请参见)

对于对象,如果引用了相同的对象,则这两个运算符仅返回
true

看看如何测试对象相等性,因为这似乎是您想要实现的。
有关对象相等性和对象标识之间的差异,请参见。

如果要测试对象相等性,则不应将两个不同的对象与
=
==
进行比较(另请参见)

对于对象,如果引用了相同的对象,则这两个运算符仅返回
true

看看如何测试对象相等性,因为这似乎是您想要实现的。 有关对象相等性和对象标识之间的差异,请参阅。

的可能重复项的可能重复项