JavaScript for of 循环代码的结果问题

issue with the result of javascript for of loop code

提问人:Mahmoud Farid 提问时间:11/23/2022 最后编辑:apollosoftware.orgMahmoud Farid 更新时间:11/23/2022 访问量:42

问:

我尝试了一种代码,将字符串数组上单词开头的每个字母大写 传统的 for 循环和 for of 循环,但它不适用于 for of 循环。

let days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];

/*for (var index = 0 ; index < days.length ; index++)
{
let test = Array.from(days[index]);
//console.log(test);
let x = days[index].charCodeAt(0)-32;
//console.log(x);
test[0] = String.fromCharCode(x);
//console.log(test);
days[index] = test.join("");
}*/



for (let index of days)
{
    //console.log(index);
    let test = Array.from(index);
    //console.log(test);
    let x = index.charCodeAt(0)-32;
    //console.log(x);
    test[0] = String.fromCharCode(x);
    //console.log(test);
    index = test.join("");
}
console.log(days);

上层循环工作得很好,但下层循环没有

JavaScript 循环 for-of-loop

评论

0赞 Konrad 11/23/2022
index = test.join("");- 在您看来,它应该做什么?
1赞 trincot 11/23/2022
你似乎在尝试更新一个字符串,但你只是重新分配给一个变量,然后你忽略了这个变量。顺便说一句:字符串是不可变的。
1赞 11/23/2022
for/of循环访问实际项,而不是其索引。
0赞 Mahmoud Farid 11/23/2022
它将字符数组连接成一个字符串@Konrad
0赞 Mahmoud Farid 11/23/2022
这里的索引一词是指项目本身,我的错,我应该将其命名为 Day 而不是 Index @bbbbbbbbb

答:

0赞 trincot 11/23/2022 #1

似乎误解是你问题的基础:分配给循环的循环变量不会修改你正在循环的数组。对变量的赋值就是这样:变量发生变化,而不是该变量最初从中获取值的数组。for...of

因此,在您的情况下,不会对数组进行任何更改。没有“内存”知道它从数组中获取了它的值 - 只是一个像其他变量一样的变量。一旦你意识到这一点,很明显,这个赋值没有任何用处,因为这个变量不会再发生任何事情。index = test.join("");daysindexdaysindexindex

在老式循环中,相应的赋值是 。这不是对变量的赋值,而是对属性的赋值!这是一个完全不同的故事。分配给某个属性将改变拥有该属性的对象。在本例中,该对象是一个数组,属性是一个索引。赋值给变量不会更改数据结构。fordays[i]*

如果要改变数组,循环不是正确的工具。作为替代方案,您可以使用并将生成的 (new!) 数组赋值回:for..of.mapdays

let days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];

days = days.map(day => day[0].toUpperCase() + day.slice(1));

console.log(days);


*赋值给变量不会改变数据结构:当变量是属性的真正别名时,此规则有一些例外,例如浏览器上下文中的全局变量变量是窗口属性的别名,而在草率模式下,arguments 数组的元素是各个函数参数的别名。但这些例外都不适用于这里。