为什么我的返回值中有逗号?JavaScript Celebrity Name Revealer

Eri*_*ard 2 javascript arrays return-value console.log

这是我的代码,我在返回的消息中的名字之间有逗号

CodePen:Celebrity Name Revealer

var MarilynMonroe=["Norma", "Jean", "Mortensen"];
var WoodyAllen=["Allen", "Konigsberg"];
var MegRyan=["Margaret", "Mary", "Emily", "Anne Hyra"];

function nameMaker () {
    msg = "The name is ";
    for (i=0; i<arguments.length; i++){
        msg += arguments[i] + " ";
    }
    return(msg);
}

console.log(nameMaker(MarilynMonroe));
console.log(nameMaker(WoodyAllen));
console.log(nameMaker(MegRyan));
Run Code Online (Sandbox Code Playgroud)

我希望它们之间有一个空格,但是如果你改变了我添加的字符串中的空格,我们就会发出一个感叹号,你会看到它只是将它附加到整个短语的末尾,这也让我感到困惑.

我创建了一个代码笔.

CodePen:Celebrity Name Revealer


我最终得到了以下解决方案:

var MarilynMonroe=["Norma", "Jean", "Mortensen"];
var WoodyAllen=["Allen", "Konigsberg"];
var MegRyan=["Margaret", "Mary", "Emily", "Anne Hyra"];

function nameRevealer (names) {
    msg = "This celebrity's real name is ";
    for (i=0; i<names.length; i++){
        msg += names[i] + " ";
    }
    return(msg);
}

console.log(nameMaker(MarilynMonroe));
console.log(nameMaker(WoodyAllen));
console.log(nameMaker(MegRyan));
Run Code Online (Sandbox Code Playgroud)

Mic*_*yan 5

arguments在这种情况下,是一个数组数组(只有一个项目).要解决此问题,请重新定义nameMaker:

var nameMaker = function(names) {
  return 'The name is ' + names.join(' ');
};
Run Code Online (Sandbox Code Playgroud)

另外,关于您的代码的一些其他反馈:

  1. 你应该总是用"var"声明变量; 您定义"msg"和"i"的方式会导致它们成为全局变量,因为您不使用"var".
  2. 通过重复迭代构造字符串时,通常使用列表作为构建器然后使用"join"函数会更快(如果只是连接一个固定数量的小字符串,那么,只需使用'+就可以了';但是,如果你在for循环中做+ =,则切换到'push'和'join').