我正在研究那段不符合我预期的代码。 特别是条件。 在控制台日志中,我看到objekt.teamA为false,teamA为false,objekt.teamB为true,teamB为true,但第一个条件无任何理由被接受。
有人可以告诉我为什么会这样吗?
function wsConnect()
{
var objekt =
{
teamA: document.getElementById('teamA').value,
teamB: document.getElementById('teamB').value
};
console.log("connect",wsUri);
ws = new WebSocket(wsUri);
ws.onmessage = function(msg)
{
obj = JSON.parse(msg.data);
lightsAv = obj.lights;
doorsAv = obj.doors;
electricAv = obj.electric;
teamA = obj.teamA;
teamB = obj.teamB;
console.log(objekt.teamA + " " + teamA + " " + objekt.teamB + " " + teamB);
//objekt.teamA is false, teamA is false, objekt.teamB is true, teamB is true
if(objekt.teamA && !teamA)
{
console.log("1st condition");
}
if(objekt.teamB && !teamB)
{
console.log("2nd condition");
}
}
ws.onopen = function()
{
document.getElementById('status').innerHTML = "connected";
console.log("connected");
}
ws.onclose = function()
{
document.getElementById('status').innerHTML = "not connected";
setTimeout(wsConnect,3000);
}
}
非常感谢。
答案 0 :(得分:4)
您的主张:
objekt.teamA为false,teamA为false
您的代码:
var objekt = { teamA: document.getElementById('teamA').value, teamB: document.getElementById('teamB').value };
objekt.teamA
的值来自表单控件的value属性。这将始终是一个字符串。
所以它不是false
,而是"false"
。
非零长度的字符串 truthy 。
if ("false") {
console.log("a true value")
}

您可以明确地测试该值:
var myVar = "false";
if (myVar !== "false") {
console.log("It is true");
} else {
console.log("It is false");
}

答案 1 :(得分:-1)
您正在检查变量是否具有真值。通过使用,
if( value ) {
}
如果值不是,则评估为true:
要比较布尔值,您可以使用 -
if(varA === false && varB === true){
}