简单的 js FOR 循环返回 'undefined'
Simple js FOR loop returning 'undefined'
不确定我做错了什么;变量 newStr
应该只是 return "Hello World",但我得到的是:
"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);
}
您应该首先初始化变量 newStr。
var newStr = '';
否则newStr会是undefined和undefined + "asa" = "undefinedasa" in javascript。如果您不知道什么是未定义的,请查看 this。
在JavaScript中,如果一个变量没有显式初始化,它默认会有undefined
。那不是字符串,而是语言的原始类型。您可以通过打印来检查
var newStr;
console.log(newStr);
// undefined
console.log(newStr + "thefourtheye");
// undefinedthefourtheye
所以,只需用一个空字符串初始化变量,就像这样
var newStr = '';
此外,请注意,在这一行
for(i=0; i < x.length; i++) {
i
以前从未声明过。因此,将创建一个新的全局变量 i
。你可能不想要那样。所以,只需使用 var
关键字来声明作用域为当前函数的变量,就像这样
for (var i = 0; i < x.length; i++) {
除此之外,translate2
是一个函数,当它被调用时,人们会期望它成为 return 东西。但是你没有明确地 returning 任何东西。因此,同样,JavaScript,默认情况下,returns undefined
。这就是问题中出现第二个 undefined
的原因。要解决这个问题,请使用 return
这样的语句
function translate2(x) {
var newStr = "";
for (var i = 0; i < x.length; i++) {
newStr += x.charAt(i);
}
return newStr;
}
newStr 未定义。
添加
var newStr = '';
所以你有
function translate2(x){
var newStr='';
x = "Hello World";
for(i=0; i<x.length; i++) {
newStr+=x.charAt(i);
}
console.log(newStr);
}
以上答案不正确。 console.log()
将在循环结束前 运行,这就是你得到 undefiend
的原因。
你可以找到你的答案 here.
你必须像这段代码一样考虑同步:
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]);
这会给你 1,2,3,done
这意味着 console.log 发生在循环结束时!
不确定我做错了什么;变量 newStr
应该只是 return "Hello World",但我得到的是:
"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);
}
您应该首先初始化变量 newStr。
var newStr = '';
否则newStr会是undefined和undefined + "asa" = "undefinedasa" in javascript。如果您不知道什么是未定义的,请查看 this。
在JavaScript中,如果一个变量没有显式初始化,它默认会有
undefined
。那不是字符串,而是语言的原始类型。您可以通过打印来检查var newStr; console.log(newStr); // undefined console.log(newStr + "thefourtheye"); // undefinedthefourtheye
所以,只需用一个空字符串初始化变量,就像这样
var newStr = '';
此外,请注意,在这一行
for(i=0; i < x.length; i++) {
i
以前从未声明过。因此,将创建一个新的全局变量i
。你可能不想要那样。所以,只需使用var
关键字来声明作用域为当前函数的变量,就像这样for (var i = 0; i < x.length; i++) {
除此之外,
translate2
是一个函数,当它被调用时,人们会期望它成为 return 东西。但是你没有明确地 returning 任何东西。因此,同样,JavaScript,默认情况下,returnsundefined
。这就是问题中出现第二个undefined
的原因。要解决这个问题,请使用return
这样的语句function translate2(x) { var newStr = ""; for (var i = 0; i < x.length; i++) { newStr += x.charAt(i); } return newStr; }
newStr 未定义。 添加
var newStr = '';
所以你有
function translate2(x){
var newStr='';
x = "Hello World";
for(i=0; i<x.length; i++) {
newStr+=x.charAt(i);
}
console.log(newStr);
}
以上答案不正确。 console.log()
将在循环结束前 运行,这就是你得到 undefiend
的原因。
你可以找到你的答案 here.
你必须像这段代码一样考虑同步:
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]);
这会给你 1,2,3,done
这意味着 console.log 发生在循环结束时!