字符串连接 - eloquent javascript 棋盘

String Concatenation - eloquent javascript chess board

为什么这个字符串没有连接成一行?我不是“\n”断行,它不应该像“####”那样登录到控制台吗?

for (var i = 1; i <= 8; i++) {
  var str = "";
  if (i % 2 == 0)
    str += "#";
  else
    str += " ";
  console.log(str);
}

这是console.log函数。它在单行上记录您的表达式结果。您的代码是这样工作的:您只需记录“”,而不是 #,然后是“”,依此类推。如果你想要 # # # #,你不应该在每次迭代时都覆盖 str,而应该用所有值创建一个字符串。使用这个:

var str = "";
for (var i = 1; i <= 8; i++) {
  if (i % 2 == 0) {
     str += "#";
  } else {
     str += " ";
  }     
}
console.log(str);

这是因为您的初始 var 声明的范围。当 var 等于“”时,您的代码所做的总是连接值。这是因为 var 在 for 循环的每次迭代开始时被重置,因为行 var str = ""; 在 for 循环内部。您需要做的是将初始声明移到您的 for 循环之外:

var str = "";
for (var i = 1; i <= 8; i++) {
  if (i % 2 == 0)
    str += "#";
  else
    str += " ";
  console.log(str);
}

看看你的for循环中发生了什么:

for (var i = 1; i <= 8; i++) {
  var str = "";     // set `str` to an empty string
  if (i % 2 == 0)   // append "#" or " " to `str`
    str += "#";
  else
    str += " ";
  console.log(str); // write `str` the console
}

{} 之间的一切都会发生八次,因此您创建了一个空字符串八次并且您调用了 console.log 八次。

如果你想创建一个空字符串一次,追加"#"" "八次,然后调用console.log 一次,你需要在你的for循环之外做一些事情:

var str = "";

for (var i = 1; i <= 8; i++) {
  if (i % 2 == 0) {
    str += "#";
  } else {
    str += " ";
  }
}

console.log(str);
// => # # # #