如何解决js-与0的比较总是返回true吗? 最小可复制示例
我只是在控制台上打印一个矩形,以对JS有所了解。我有一个嵌套循环(伪代码for i < this.height
,for 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 举报,一经查实,本站将立刻删除。