0

Why do I first get undefined in the console then it prints the numbers I want? How can I solve the code so that it does not write undefined in the beginning?

var rangeStart;
var rangeStop;
var sum1;

function printRange(rangeStart, rangeStop) {
  for (rangeStart = 23; rangeStart < rangeStop; rangeStart++) {
    sum1 += rangeStart + ',';
  }
}

printRange(23, 47);
var sum1 = sum1.slice(0, -1);
console.log(sum1);
j08691
  • 204,283
  • 31
  • 260
  • 272
MATKALI
  • 57
  • 8
  • Does this answer your question? [Simple js FOR loop returning 'undefined'](https://stackoverflow.com/questions/28665160/simple-js-for-loop-returning-undefined) – Ivar Jul 14 '20 at 18:35

6 Answers6

2

sum1's value initially is undefined. Set it to 0 or "" (empty string) first.

var rangeStart;
var rangeStop;
var sum1 = 0; // here

function printRange(rangeStart, rangeStop) {
  for (rangeStart = 23; rangeStart < rangeStop; rangeStart++) {
    sum1 += rangeStart + ',';
  }
}

printRange(23, 47);
var sum1 = sum1.slice(0, -1);
console.log(sum1);
Daniel A. White
  • 187,200
  • 47
  • 362
  • 445
2

First of all you might want to use let instead of var, this method of declaring variables was introduced in ES6 - the latest version of JavaScript. Declaring variables with let improves the security of your code. More info can be found here.

To answer your question, you're declaring sum1 as '' (undefined) and afterwards you redeclare sum1 to be the product of sum1.slice(0,-1).

To fix the bug, try setting sum1 to 0 instead of ''.

let sum1 = 0

The console should then log the desired value.

Kay Angevare
  • 639
  • 6
  • 17
1

sum1 is not defined (in undefined state). Try setting it to a empty string:

    var rangeStart;
    var rangeStop;
    var sum1 = '';
    function printRange(rangeStart, rangeStop) {
     for (rangeStart = 23; rangeStart < rangeStop; rangeStart ++ ) {
         sum1 += rangeStart + ',';
     }
    }
    
    printRange(23,47);
    var sum1 = sum1.slice(0, -1);
    console.log(sum1);
Optimus
  • 79
  • 7
Amacado
  • 630
  • 5
  • 20
0

You have to add if case for undefined. This error comes when you declared variable but used without defined initial values.

when sum1 += rangeStart + ','; sum1 doesnot have any value its undefined. This add in your string. To avoid you have to handle it separately.

var rangeStart;
var rangeStop;
var sum1;

function printRange(rangeStart, rangeStop) {
  for (rangeStart = 23; rangeStart < rangeStop; rangeStart++) {
    if(sum1 == undefined){
    sum1 = rangeStart + ',';
    }
    else{ 
    sum1 += rangeStart + ',';
    }
  }
}

printRange(23, 47);
var sum1 = sum1.slice(0, -1);
console.log(sum1);
Avinash Dalvi
  • 8,551
  • 7
  • 27
  • 53
0

Here is the fix.. Try this...

var rangeStart;
var rangeStop;
var sum1;

function printRange(rangeStart, rangeStop) {
    sum1="";     //added
  for (rangeStart = 23; rangeStart < rangeStop; rangeStart++) {
    sum1 += rangeStart + ',';
  }
}

printRange(23, 47);
var sum1 = sum1.slice(0, -1);
console.log(sum1);
Optimus
  • 79
  • 7
0
var rangeStart;
var rangeStop;
var sum1;

Your first 3 variables declarations are unnessecary. rangeStart and rangeStop don't need to be declared as they are gonna be arguments of yourfunction printRange.

sum1 , you declare it two times, the first time it initialize it to undefined, and then later, instead of assigning a value to an already declared variable, you redeclare it. That's why you have those 2 logs in the console. The code below should do what you want to achieve.

function printRange(rangeStart, rangeStop) {
  let sum = ""; 
  for (var i = rangeStart; i < rangeStop; i++) {
    sum += i + ',';
  }
  return sum;
}

var sum1 = printRange(23, 47).slice(0, -1);
console.log(sum1);
escteban
  • 26
  • 2