Javascript 简单变量检查返回false,应为true
有点背景 我正在从我的服务器接收一条消息,其形式为Javascript 简单变量检查返回false,应为true,javascript,node.js,Javascript,Node.js,有点背景 我正在从我的服务器接收一条消息,其形式为I,使用节点字符串\u解码器功能将其转换为utf8编码字符串: var StringDecoder = require('string_decoder').StringDecoder; var decoder = new StringDecoder('utf8'); global.message = null; client.on('data', function(chunk) { console.log(`New Message $
I,使用节点字符串\u解码器功能将其转换为utf8编码字符串:
var StringDecoder = require('string_decoder').StringDecoder;
var decoder = new StringDecoder('utf8');
global.message = null;
client.on('data', function(chunk) {
console.log(`New Message ${decoder.write(chunk)}`);
message = decoder.write(chunk);
})
运行时,此命令将注销新消息OK
,这是正确的
在另一个函数中,我循环直到全局变量等于OK,但是我遇到了一些问题:
console.log(`Global vari ${message}`);
if(message != "OK"){
setTimeout(check, 1000);
} else {
return cb(true);
}
上面的退出Global vari OK
,但是if语句失败。我对消息进行了类型检查,它按预期输出字符串
我很困惑这里到底发生了什么,但我一辈子都搞不清楚。你确定它不包含任何BOM字符或任何其他不可见的数据,使它不等于OK吗 您可以尝试删除除字母以外的所有内容,如:
let sanitized = message.replace(/\W/g, '');
console.log(`Global vari ${sanitized}`);
if(sanitized != "OK"){
setTimeout(check, 1000);
} else {
return cb(true);
}
看看现在打印的是什么
您可以看到以下有关BOM表字符及其导致的问题的答案:
if(sanitized.trim() != "OK"){
setTimeout(check, 1000);
} else {
return cb(true);
}
希望这有帮助。您尝试过
.trim()
<代码>“确定”!=“OK”控制台语句很复杂,可能没有按照代码的顺序输出。尝试登录else
语句。也许可以尝试此操作以确保所有内容都匹配。tostring().toupper().trim()