试图理解这个带三元运算符的JavaScript For循环

试图理解这个带三元运算符的JavaScript For循环,javascript,Javascript,我正在读三元运算符,如下所示 布尔表达式:i*j%8 如果为true则执行:将空格与res连接起来 如果为false则执行:将星号与res连接 在第一次迭代中,当涉及到内部循环时,它只输出“*”,当模为0时,所有其他时间它都输出“” 为什么会这样 还有,我不明白第一行。下面是做什么 res += (i * j) % 8 ? ' ' : '*'; 将变量res赋给3个值的目的是什么 在控制台中,没有这一行它可以正常工作 var res = '\n', i, j; 以下是三个变量,以令人困惑

我正在读三元运算符,如下所示

布尔表达式:i*j%8 如果为true则执行:将空格与res连接起来 如果为false则执行:将星号与res连接 在第一次迭代中,当涉及到内部循环时,它只输出“*”,当模为0时,所有其他时间它都输出“”

为什么会这样

还有,我不明白第一行。下面是做什么

res += (i * j) % 8 ? ' ' : '*';
将变量res赋给3个值的目的是什么

在控制台中,没有这一行它可以正常工作

var res = '\n', i, j;  
以下是三个变量,以令人困惑的方式写下:

var res = '\n', i, j;  
一行:

var res = '\n'; // newline
var i;
var j;
脚本运行正常。我用破折号替换了空格,结果如下:

var i, j, res = '\n';  

如果i=1,j=i,那么i*j%8不是0,因此为真,这将导致破折号。第一行,你看到七个破折号,然后是a*,等等。

它运行从1*1到1*14的所有乘法,一直到6*1到6*14。正如您已经指出的,只有当所述乘法的模为零时,它才会向res字符串添加一个*。在1到14的范围内,只有8次为真

你可以在你的内心积木中添加一些东西来形象化并帮助你理解。例如:

-------*-------
---*---*---*---
-------*-------
-*-*-*-*-*-*-*-
-------*-------
---*---*---*---
-------*-------
完整的例子如下:

console.log("i:", i, " j:", j, " multiplication:", i*j, "mod8:", (i*j)%8)

这是一本书的复制品/粘贴品。面向对象JavaScript-第三版,Ved Antani,Stoyan Stefanovi*j%8不是布尔表达式,而是一个数学运算。因此,如果模运算的结果为0,则等于false?如果模=0,则结果为false,则显示*。在@Doej2017 0处进行的试验为假值。
console.log("i:", i, " j:", j, " multiplication:", i*j, "mod8:", (i*j)%8)
var res = '\n', i, j;
for (i = 1; i <= 7; i++) {                
    for (j = 1; j <= 15; j++) {
        res += (i * j) % 8 ? ' ' : '*';
        console.log("i:", i, " j:", j, " multiplication:", i*j, "mod8:", (i*j)%8)
    }
    res += '\n';
}
alert(res);