JavaScript if语句不';行不通
我有一个比较两个对象属性(字符串)的简单if语句: 我很惊讶他们没有通过,所以我调试:JavaScript if语句不';行不通,javascript,if-statement,Javascript,If Statement,我有一个比较两个对象属性(字符串)的简单if语句: 我很惊讶他们没有通过,所以我调试: console.log(client.room + " == " + sender.room); 并且输出是正确的: #General == #General 所以我尝试了很多东西,但仍然不起作用 然后我试了一下: var clientRoom = client.room; if(clientRoom == '#General'){ /*Work!*/ } if(client.room == '#Gen
console.log(client.room + " == " + sender.room);
并且输出是正确的:
#General == #General
所以我尝试了很多东西,但仍然不起作用
然后我试了一下:
var clientRoom = client.room;
if(clientRoom == '#General'){ /*Work!*/ }
if(client.room == '#General'){ /*Work!*/ }
但我还是被困在。。。如何比较这两个对象属性以确定它们是否相等?听起来像是
client.room
和sender.room
是使用toString
方法的对象。两个不同的对象彼此之间没有==
,即使它们具有相同的内容并且它们的toString
匹配
您的client.room==“#General”
之所以有效,是因为==
将强制其操作数尝试使其成为相同的类型。在这种情况下,它将client.room
强制为字符串(通过client.room
的toString
)
您需要确定要使用哪些标准来确定对象是否等效,并在比较对象时使用这些标准。您可以将其封装在equals
方法或类似方法中
问题说明:
教室{
建造师(姓名){
this.name=名称;
}
toString(){
返回“#”+this.name;
}
}
const room1=新房间(“一般”);
const room2=新房间(“一般”);
console.log(room1==room2);//假的
console.log(room1+“-”+room2);//#一般-#一般
console.log(room1==“#General”)//true
什么是client.room
?什么是sender.room
?如果它们是字符串,=
绝对有效。如果它们是具有toString
方法的对象,=
将不适用于具有相同内容的不同对象。对象的字符串形式并不能告诉我们该对象是什么。它似乎不是一个简单的字符串。是的,toString()方法解决了我的问题。非常感谢。
var clientRoom = client.room;
if(clientRoom == '#General'){ /*Work!*/ }
if(client.room == '#General'){ /*Work!*/ }