简单变量检查返回false,应该为true

时间:2017-02-02 12:18:54

标签: javascript node.js

一点背景。

我收到来自我的服务器的消息,其形式为<Buffer 00 00 00>我使用Node string_decoder函数将其转换为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);
 })

运行时,会注销New Message OK,这是正确的

在另一个函数中,我循环直到全局变量等于OK,但是我遇到了一些问题:

console.log(`Global vari ${message}`);
if(message != "OK"){
    setTimeout(check, 1000);
} else {
    return cb(true);
}

以上注销Global vari OK但if语句失败。我已对消息进行了类型检查,并按预期输出字符串。

我很难过这里发生的事情,但我无法理解我的生活。

2 个答案:

答案 0 :(得分:1)

尝试在比较之前修剪,以确保没有多余空格:

if(sanitized.trim() != "OK"){
    setTimeout(check, 1000);
} else {
    return cb(true);
}

希望这有帮助。

答案 1 :(得分:0)

您确定它不包含任何BOM字符或任何其他不可见的数据,使其不等于OK吗?

您可以尝试删除除字母之外的所有内容,例如:

let sanitized = message.replace(/\W/g, '');
console.log(`Global vari ${sanitized}`);
if(sanitized != "OK"){
    setTimeout(check, 1000);
} else {
    return cb(true);
}

并查看它现在打印的内容。

您可以看到有关BOM字符及其导致的问题的以下答案: