提问人:Mahmoud Farid 提问时间:11/23/2022 最后编辑:apollosoftware.orgMahmoud Farid 更新时间:11/23/2022 访问量:42
JavaScript for of 循环代码的结果问题
issue with the result of javascript for of loop code
问:
我尝试了一种代码,将字符串数组上单词开头的每个字母大写 传统的 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);
上层循环工作得很好,但下层循环没有
答:
0赞
trincot
11/23/2022
#1
似乎误解是你问题的基础:分配给循环的循环变量不会修改你正在循环的数组。对变量的赋值就是这样:变量发生变化,而不是该变量最初从中获取值的数组。for...of
因此,在您的情况下,不会对数组进行任何更改。没有“内存”知道它从数组中获取了它的值 - 只是一个像其他变量一样的变量。一旦你意识到这一点,很明显,这个赋值没有任何用处,因为这个变量不会再发生任何事情。index = test.join("");
days
index
days
index
index
在老式循环中,相应的赋值是 。这不是对变量的赋值,而是对属性的赋值!这是一个完全不同的故事。分配给某个属性将改变拥有该属性的对象。在本例中,该对象是一个数组,属性是一个索引。赋值给变量不会更改数据结构。for
days[i]
*
如果要改变数组,循环不是正确的工具。作为替代方案,您可以使用并将生成的 (new!) 数组赋值回:for..of
.map
days
let days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
days = days.map(day => day[0].toUpperCase() + day.slice(1));
console.log(days);
*赋值给变量不会改变数据结构:当变量是属性的真正别名时,此规则有一些例外,例如浏览器上下文中的全局变量
变量是窗口
属性的别名,而在草率模式下,arguments
数组的元素是各个函数参数的别名。但这些例外都不适用于这里。
评论
index = test.join("");
- 在您看来,它应该做什么?for/of
循环访问实际项,而不是其索引。