Aad*_*hah 4 javascript for-in-loop ecmascript-6 for-of-loop
我在一次采访中得到了以下 JavaScript 程序。
const average = xs => {
let sum = 0;
for (let num in xs) sum += num;
return sum / xs.length;
};
const result = average([2, 4, 6]);
console.log(result); // 4Run Code Online (Sandbox Code Playgroud)
面试官让我解释一下这段代码是如何工作的。我认为平均函数只是将数组中的所有数字相加,然后将总和除以数组的长度。然而,这并不是正确的解释。
上面的代码有一个错误。尽管如此,它会产生正确的答案。你能找到错误并修复它吗?另外,你能解释一下为什么上面的代码即使不正确也会产生正确的答案吗?
问题是您使用的是for...in循环而不是for...of循环。一个for...of循环将遍历数组元素,无论输入如何,都会产生正确的答案。但是,for...in循环遍历数组索引。因此,在大多数情况下,它会产生错误的答案。尽管如此,对于这个特定的输入,它会产生正确的答案。
| sum | num |
| ------ | --- |
| 0 | "0" |
| "00" | "1" |
| "001" | "2" |
| "0012" | |
Run Code Online (Sandbox Code Playgroud)
该阵列的索引是"0","1",和"2"。索引是字符串,而不是数字。因此,当您将索引添加"0"到sum, 即的初始值时,0JavaScript 会将 转换sum为字符串,将两个字符串连接起来,并将连接后的字符串存储回sum。在循环结束时,的值为sumis"0012"而不是预期值12。
但是,"0012" / 3和 都会12 / 3产生正确的答案,即4。在第一种情况下,JavaScript 首先将字符串"0012"转换为数字12。因此,我们意外地得到了这个特定输入的正确答案。
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |