微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

js-与0的比较总是返回true吗? 最小可复制示例

如何解决js-与0的比较总是返回true吗? 最小可复制示例

我只是在控制台上打印一个矩形,以对JS有所了解。我有一个嵌套循环(伪代码for i < this.heightfor j < this.width)。如果j为0或width-1,我想为边框打印一个|

if (j == this.width - 1 || j == 0)
{ c = '|'; }

,然后将c附加到我的输出中。与0的比较将返回true,而不管j的值如何。我最好的猜测是,它认为0并不是真正的类型,或者我以某种方式使用了JS认为它是通配符。供参考,我的输出如下所示:

--------
||||||||
||||||||
||||||||
||||||||
||||||||
||||||||
--------

顶部和底部的-在外部循环中指定。

最小可复制示例

啊,抱歉,我忘了这个。这是该函数代码

let obj =
  {'width': 8,'height': 8,'ascii_display' : function() {
      let output_str = "";
      for (let i = 0; i < this.height; i++) {
        let c = ' ';

        /* inner loop will not override these */
        if (i == 0 || i == this.height - 1) {
          c = '-'; 
        }

        for (let j = 0; j < this.width; j++) {
          if (c == " ") {
            if (j == this.width - 1 || j == 0) {
              c = '|'; 
            }
          }
          output_str += c;
        }
        output_str += "\n";
      }
      console.log(output_str);
      }
  };
  
obj.ascii_display();

解决方法

您将c更改为管道,然后再将其更改回其他任何内容。还要注意,在此之上,您需要执行if (c == " ") {检查,但是一旦c是管道,该检查就永远不会成立,因此将永远不会达到其下面的检查。

您可能想要更接近此的东西

for (let j = 0; j < this.width; j++) {
    if (j == this.width - 1 || j == 0) {
        c = '|';
    } else {
        c = ' ';  // Reset it back after
    }

    . . .    
}

使用条件表达式(“三进制”)可以简化一点:

for (let j = 0; j < this.width; j++) {
    c = (j == this.width - 1 || j == 0) ? "|" : " ";    
    . . .    

}
,

您需要先初始化win_num

例如:

j

for (var j = 0;j < this.width; j++)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。