var res = '\n', i, j;
for (i = 1; i <= 7; i++) {
for (j = 1; j <= 15; j++) {
res += (i * j) % 8 ? ' ' : '*';
}
res += '\n';
}
alert(res);
(从面向对象的JavaScript复制/粘贴 - 第三版,Ved Antani,Stoyan Stefanov)
试图理解这个循环。 我理解发生了什么但不是为什么。
res += (i * j) % 8 ? ' ' : '*';
我按如下方式阅读三元运算符。
(i * j) % 8
res
res
在第一次迭代中,当涉及内部循环时,它仅输出&#39; *&#39;,当模数为0时,所有其他时间输出&#39; &#39;
为什么会这样做?
另外,不了解第一行。以下是做什么的?
var res = '\n', i, j;
将变量res
分配给3个值的目的是什么。
在控制台中,没有这条线就可以正常工作。
答案 0 :(得分:1)
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,因此为真,这会导致破折号。第一行,你看到7个破折号,然后是*等等。
答案 1 :(得分:0)
它将所有乘法从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)
作为一个完整的例子,这将是这样的:
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);