简单的 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

  1. 在JavaScript中,如果一个变量没有显式初始化,它默认会有undefined。那不是字符串,而是语言的原始类型。您可以通过打印来检查

    var newStr;
    console.log(newStr);
    // undefined
    console.log(newStr + "thefourtheye");
    // undefinedthefourtheye
    

    所以,只需用一个空字符串初始化变量,就像这样

    var newStr = '';
    
  2. 此外,请注意,在这一行

    for(i=0; i < x.length; i++) {
    

    i 以前从未声明过。因此,将创建一个新的全局变量 i。你可能不想要那样。所以,只需使用 var 关键字来声明作用域为当前函数的变量,就像这样

    for (var i = 0; i < x.length; i++) {
    
  3. 除此之外,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 发生在循环结束时!