【问题标题】:Simple variable check returns false, should be true简单变量检查返回 false,应该为 true
【发布时间】:2017-06-19 12:26:09
【问题描述】:

一点背景。

我从服务器收到一条消息,格式为<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 语句失败。我已经对消息进行了 typeof 检查,它按预期输出字符串。

我对这里发生的事情感到困惑,但我一生都无法弄清楚。

【问题讨论】:

  • 你试过.trim()吗? "OK" != "OK "
  • 控制台语句很棘手,可能不会按照您的代码顺序输出。尝试登录else 语句。
  • 也许可以试试这个以确保一切都匹配 .tostring().toupper().trim()

标签: javascript node.js


【解决方案1】:

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

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

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

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

    看看现在打印什么。

    您可以看到这些关于 BOM 字符及其引起的问题的答案:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 2019-03-29
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多