javascript variable initialization shows NaN

生来就可爱ヽ(ⅴ<●) 提交于 2021-02-05 05:51:10

问题


function sumArray(numbers){
  var sum;
  for(var i in numbers){
      sum += numbers[i];
  }
  return sum;
}

console.log(sumArray([1,2,3,4,5]));

Hi all,

The outcome is NaN. However, if I initialize sum with sum = 0, the outcome is 15. Why JS does not recognize the value type in the array and do the initialization for me? Why does it return NaN in the first case?

Thanks


回答1:


When a variable is declared within current scope, it is initialized with undefined value.

var sum; // is initialized with undefined 

In the for loop, the addition sum += numbers[i] is actually doing an undefined + 1 operation. Because both operands are not string types, they are converted to numbers:

  1. undefined + 1
  2. NaN + 1
  3. NaN

Please check this article for more info about the addition operator (example 7).

Of course, to solve this problem just initialize it with 0:

var sum = 0;

Also I would sum the items simpler:

var sum = [1,2,3,4,5].reduce(function(sum, item) { 
  return sum + item; 
});



回答2:


when you create var sum; it's value is undefined [default]

so when you keep adding to undefined you get NaN [Not a Number]

but if you initialize as var sum=0;

then you are adding numbers to 0 so you get correct output

try

console.log(undefined+1); you get NaN but

if you do

console.log(0+1); then you get 1




回答3:


This is because you have not initialized sum. So sum+ will try to add to undefined.

    function sumArray(numbers){
      var sum=0;      // sum="" if you want output as 12345
      for(var i in numbers){
          sum += numbers[i];
      }
      return sum;
    }

console.log(sumArray([1,2,3,4,5]));

jsfiddle




回答4:


The reason behind is very clear. When JavaScript finds any "undefined" or "unexpected" error then it returns NaN.

Where else in your second condition where you added sum=0 ,it already made a value of it then what ever you did it was addition to that value.



来源:https://stackoverflow.com/questions/36002865/javascript-variable-initialization-shows-nan

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!