for嵌套循环 累加结果为NaN?

const real = new Array();
for (let k = 0; k < 100; k += 50) {
    for (let n = 0; n < 5; n += 1) {
      real[k] += n;
    }
}

运行结果为什么是NAN?怎样才能正确累加呀?

阅读 3.7k
3 个回答

累加没有初始值,也就是说,初始值是 undefined,跟数字相加都是 NaN

可以在内循环开始前给个初始值:

const real = new Array();
for (let k = 0; k < 100; k += 50) {
    real[k] = 0;
//  ^^^^^^^^^^^ 累加初始值
    for (let n = 0; n < 5; n++) {
        real[k] += n;
    }
}

如果数组定长,可以在产生数组的时候就用 .fill 把初始值给填上,

const arr = Array(10);
console.log(arr);
// [ <10 empty items> ]

arr.fill(0);
console.log(arr);
// [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]

顺便一提:n += 1 可以用 n++ 或者 ++n 代替。

// 第一次 real[k] 就是 undefined
console.log(undefined + 1);
结果: NaN

var real=[];
for (let k = 0; k < 100; k += 50) {
        for (let n = 0; n < 5; n++) {
          real[k] = n + (real[k] || 0);
        }
      }
10

结果

0: 10
50: 10

js是弱类型语音,变量不给初始值的话默认给undefined初始值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题