5
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

2
  • undefined+anything = NaN Commented Mar 15, 2016 at 4:47
  • 1
    Initialize var sum = 0; Commented Mar 15, 2016 at 4:48

4 Answers 4

4

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; 
});
Sign up to request clarification or add additional context in comments.

Comments

4

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

Comments

0

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

Comments

0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.