简单的js FOR循环返回'undefined'

时间:2015-02-23 00:22:28

标签: javascript variables for-loop

不确定我在这里做错了什么;变量newStr应该只返回“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);
}

4 个答案:

答案 0 :(得分:15)

  1. 在JavaScript中,如果未明确初始化变量,则默认情况下会undefined。这不是字符串,而是语言的原始类型。你可以通过打印来检查它

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

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

    var newStr = '';
    
  2. 另请注意,在此行中

    for(i=0; i < x.length; i++) {
    
    之前从未宣布过{p> i。因此,将创建一个新的全局变量i。你可能不希望这样。因此,只需使用var关键字来声明作用于当前函数的变量,如此

    for (var i = 0; i < x.length; i++) {
    
  3. 除此之外,translate2是一个函数,当它被调用时,人们会期望它返回一些东西。但你没有明确地归还任何东西。因此,默认情况下,JavaScript会返回undefined。这就是你在问题中获得第二个undefined的原因。要解决此问题,请使用return这样的语句

    function translate2(x) {
        var newStr = "";
        for (var i = 0; i < x.length; i++) {
            newStr += x.charAt(i);
        }
        return newStr;
    }
    

答案 1 :(得分:4)

首先应该初始化变量newStr。

var newStr = '';

否则,newStr将在javascript中未定义且未定义+“asa”=“undefinedasa”。如果您不知道未定义的内容,请选中this

答案 2 :(得分:1)

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);
}

答案 3 :(得分:-1)

以上答案不正确。 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在循环结束时发生!