Reputation: 913
Not sure what I'm doing wrong here; the variable newStr
should just return "Hello World", but I'm getting this instead:
"undefinedHello World"
undefined
JS
function translate2(x){
var newStr;
x = "Hello World";
for(i=0; i<x.length; i++) {
newStr+=x.charAt(i);
}
console.log(newStr);
}
Upvotes: 15
Views: 28919
Reputation: 2821
The above answers are not correct. The console.log()
will run before the loop finishes and that is why you get undefiend
.
You can find your answer here.
you have to think sync like this piece of code:
function delay() {
return new Promise(resolve => setTimeout(resolve, 300));
}
async function delayedLog(item) {
// notice that we can await a function
// that returns a promise
await delay();
console.log(item);
}
async function processArray(array) {
for (const item of array) {
await delayedLog(item);
}
console.log('Done!');
}
processArray([1, 2, 3]);
this will give you 1,2,3,done
which means the console.log is happening at the end of loop!
Upvotes: 0
Reputation: 239443
In JavaScript, if a variable is not initialized explicitly, it will by default have undefined
. That is not a string but a primitive type of the Language. You can check that by printing it
var newStr;
console.log(newStr);
// undefined
console.log(newStr + "thefourtheye");
// undefinedthefourtheye
So, just initialize the variable with an empty string, like this
var newStr = '';
Also, note that, in this line
for(i=0; i < x.length; i++) {
i
has never been declared before. So, a new global variable i
will be created. You may not want that. So, just use var
keyword to declare the variable scoped to the current function, like this
for (var i = 0; i < x.length; i++) {
Apart from that, translate2
is a function and when it is invoked, one would expect it to return something. But you are not returning anything explicitly. So, again, JavaScript, by default, returns undefined
. That is why you are getting the second undefined
in the question. To fix that, use return
statement like this
function translate2(x) {
var newStr = "";
for (var i = 0; i < x.length; i++) {
newStr += x.charAt(i);
}
return newStr;
}
Upvotes: 21
Reputation: 317
newStr is undefined. Add
var newStr = '';
So that you have
function translate2(x){
var newStr='';
x = "Hello World";
for(i=0; i<x.length; i++) {
newStr+=x.charAt(i);
}
console.log(newStr);
}
Upvotes: 0