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

Unc*_*lug 10 javascript variables for-loop

不知道我在这里做错了什么; 变量newStr应该只返回"Hello World",但我得到的是:

"undefinedHello World"
undefined
Run Code Online (Sandbox Code Playgroud)

JS

function translate2(x){
  var newStr;
  x = "Hello World";
  for(i=0; i<x.length; i++) {
    newStr+=x.charAt(i);
  }
  console.log(newStr);
}
Run Code Online (Sandbox Code Playgroud)

the*_*eye 18

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

    var newStr;
    console.log(newStr);
    // undefined
    console.log(newStr + "thefourtheye");
    // undefinedthefourtheye
    
    Run Code Online (Sandbox Code Playgroud)

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

    var newStr = '';
    
    Run Code Online (Sandbox Code Playgroud)
  2. 另外,请注意,在这一行

    for(i=0; i < x.length; i++) {
    
    Run Code Online (Sandbox Code Playgroud)

    i以前从未被宣布过.因此,i将创建一个新的全局变量.你可能不希望这样.因此,只需使用varkeyword来声明作用于当前函数的变量,就像这样

    for (var i = 0; i < x.length; i++) {
    
    Run Code Online (Sandbox Code Playgroud)
  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;
    }
    
    Run Code Online (Sandbox Code Playgroud)


Ana*_*nth 5

您应该首先初始化变量 newStr。

var newStr = '';
Run Code Online (Sandbox Code Playgroud)

否则,在 javascript 中 newStr 将是 undefined 和 undefined + "asa" = "undefinedasa"。如果你不知道什么是未定义的,看看这个