问题
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);
}
回答1:
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"); // undefinedthefourtheyeSo, 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++) {ihas never been declared before. So, a new global variableiwill be created. You may not want that. So, just usevarkeyword to declare the variable scoped to the current function, like thisfor (var i = 0; i < x.length; i++) {Apart from that,
translate2is 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, returnsundefined. That is why you are getting the secondundefinedin the question. To fix that, usereturnstatement like thisfunction translate2(x) { var newStr = ""; for (var i = 0; i < x.length; i++) { newStr += x.charAt(i); } return newStr; }
回答2:
You should first initialize the variable newStr.
var newStr = '';
Otherwise, newStr will be undefined and undefined + "asa" = "undefinedasa" in javascript. If you don't know what is undefined, check this out.
回答3:
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);
}
回答4:
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!
来源:https://stackoverflow.com/questions/28665160/simple-js-for-loop-returning-undefined