Javascript 仅用于循环打印最后一次迭代
我的for循环只打印最后一次迭代 移动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
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);
}
}