Javascript 仅用于循环打印最后一次迭代

Javascript 仅用于循环打印最后一次迭代,javascript,html,Javascript,Html,我的for循环只打印最后一次迭代 移动document.getElementById(“警报”).innerHTML=str输出和输入for循环 HTML(放在javascript代码之后) 需要输出 "Acer Chromebook 11 (C740)"The number is 0 "Acer Chromebook 11 (C740)"The number is 1 "Acer Chromebook 11 (C740)"The number is 2 "Acer Chromebook 1

我的for循环只打印最后一次迭代

移动
document.getElementById(“警报”).innerHTML=str输出和输入for循环

HTML(放在javascript代码之后)

需要输出



"Acer Chromebook 11 (C740)"The number is 0
"Acer Chromebook 11 (C740)"The number is 1
"Acer Chromebook 11 (C740)"The number is 2
"Acer Chromebook 11 (C740)"The number is 3
"Acer Chromebook 11 (C740)"The number is 4

使用赋值运算符(
=
)替换先前存储在变量中的任何值。因此,当您遍历循环并点击
var str=JSON.stringify(obj2.model)
行时,将替换
str
中以前的任何值。因此,一旦退出循环,就只进行最后一次赋值。此外,使用
var
的方法是不正确的
var
在函数范围内声明变量。循环之前的
var str=''
声明定义了变量,因此循环中的
var str
无效,尽管引擎正在原谅并只是在旧值的顶部赋值。如今,如果有像
let
const
这样不太容易混淆的选项可用,您应该很少使用
var

正如@CertainPerformance所说的,执行一系列赋值语句会使代码更难理解,因为您必须在头脑中浏览变量中所包含内容的历史记录。这样的代码会更简洁,因为它不会多次重新分配。注意,我还使用了更现代的JS(与IE不兼容),因此如果您不能使用async/await,请忽略该更改:

async function execute() {
    try {
      const { result } = await gapi.client.directory.chromeosdevices.list({
        "customerId": "my_customer"
      });

      const alertDiv = document.getElementById("alert");
      for (let i = 0; i < 5; i++) {
        const { model } = result.chromeosdevices[i];
        const line = `Device ${i} has model ${JSON.stringify(model)}`;
        alertDiv.appendChild(document.createTextNode(line)); // Safely encode text
        alertDiv.appendChild(document.createElement('br'));
      }
    } catch (err) { 
      console.error("Execute error", err); 
    }
}
异步函数执行(){
试一试{
const{result}=wait gapi.client.directory.chromeosdevices.list({
“客户ID”:“我的客户”
});
const alertDiv=document.getElementById(“警报”);
for(设i=0;i<5;i++){
const{model}=result.chromeos设备[i];
const line=`Device${i}具有模型${JSON.stringify(model)}`;
alertDiv.appendChild(document.createTextNode(行));//安全地编码文本
alertDiv.appendChild(document.createElement('br'));
}
}抓住(错误){
console.error(“执行错误”,err);
}
}

使用
document.getElementById(“警报”).innerHTML=str
如果要覆盖元素中以前存在的内容,请使用
+=
而不是我在此行中不使用它吗?str+=“数字是”+i+“
”,我是否删除document.getElementById(“alert”).innerHTML=str并将其替换为document.getElementById(“alert”).innerHTML+=str?
str
在循环内被重新分配为
var str=JSON.stringify(obj2.model)
,它不保留以前指定为的任何
str
。如果没有不必要的重新分配,代码通常更容易读写,这不是我想要的吗?当I为0-4时,我希望每次打印obj.chromeosdevices[I]时的输出都不同。我是javascript新手,所以我可能做得不对/很长时间了我得到了一个意外的语法错误:const{result}行上意外的令牌返回
"Acer Chromebook 11 (C740)"The number is 4


"Acer Chromebook 11 (C740)"The number is 0
"Acer Chromebook 11 (C740)"The number is 1
"Acer Chromebook 11 (C740)"The number is 2
"Acer Chromebook 11 (C740)"The number is 3
"Acer Chromebook 11 (C740)"The number is 4
async function execute() {
    try {
      const { result } = await gapi.client.directory.chromeosdevices.list({
        "customerId": "my_customer"
      });

      const alertDiv = document.getElementById("alert");
      for (let i = 0; i < 5; i++) {
        const { model } = result.chromeosdevices[i];
        const line = `Device ${i} has model ${JSON.stringify(model)}`;
        alertDiv.appendChild(document.createTextNode(line)); // Safely encode text
        alertDiv.appendChild(document.createElement('br'));
      }
    } catch (err) { 
      console.error("Execute error", err); 
    }
}