Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 简单变量检查返回false,应为true_Javascript_Node.js - Fatal编程技术网

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()