Unexpected NaN output after typeof var displays expected type of number

Getting unexpected NaN in the exercise in the eloquent chapter 4 of Javascript, but the error is not obvious enough for me to pick it up. Can someone take a look and point out my mistake?

/* Write a range function that takes two arguments, start and end, and returns an array containing all the numbers from start up to (and including) end. */ var numRng = []; function range( start, end ) { //var numRng = []; cntr = ( end - start ); for ( i = 0; i <= cntr; i++ ) { numRng.push( start ); start++; } // end FOR //return numRng; } // end FUNC range range( 1, 10 ); /*for ( i = 0; i < numRng.length; i++ ) { console.log( 'Array element ' + numRng.indexOf( 1 + i ) + ' contains range value: ' + numRng[i] ); }*/ /* Next, write a sum function that takes an array of numbers and returns the sum of these numbers. Run the previous program and see whether it does indeed return 55. */ var total = 0; function sum( numRng ) { //var total = 0; for ( i = 0; i <= numRng.length; i++ ) { //console.log( total ); total += numRng[i]; //console.log( total ); } // end FOR console.log( typeof total ); console.log( total ); } // end FUNC range sum( numRng ); console.log( 'Total sum of all element values held by array numRng is: ' + total ); 

And here is the Firebug output, showing that typeof total after the for loop in func sum is really number , but then output as NaN .

 var numRng = []; // seem to require global var ...nt values held by array numRng is: ' + total ); number NaN Total sum of all element values held by array numRng is: NaN 

Any help was appreciated.

+5
source share
2 answers

Problem here

 for ( i = 0; i <= numRng.length; i++ ) ^ 

numRng[numRng.length] => undefined
I adjusted the code below

 var numRng = []; function range( start, end ) { //var numRng = []; cntr = ( end - start ); for ( i = 0; i <= cntr; i++ ) { numRng.push( start ); start++; } } range( 1, 10 ); var total = 0; function sum( numRng ) { for ( i = 0; i < numRng.length; i++ ) { total += numRng[i]; } console.log( typeof total ); console.log( total ); } sum( numRng ); console.log( 'Total sum of all element values held by array numRng is: ' + total ); 
+6
source

The only mistake here is that you have

 for ( i = 0; i <= numRng.length; i++ ) 

What should be

 for ( i = 0; i < numRng.length; i++ ) 

Array length - last index + 1; so when using <= in the final loop iteration, numRng [i] will be undefined, and adding a number to undefined will give you NaN.

+3
source

Source: https://habr.com/ru/post/1264846/


All Articles