You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript代码中names[i]返回undefined问题排查求助

JavaScript代码中names[i]返回undefined的问题修复

你的代码有两个关键问题,导致你看到undefined以及names[i]没被正确使用:

问题1:speak方法未接收并使用传入的name参数

你调用byeSpeaker.speak(names[i])和helloSpeaker.speak(names[i])时,明明传入了数组元素,但speak方法没有定义参数,也没把传入的值赋值给对象的name属性,所以方法内部一直用初始设置的空字符串,自然不会显示对应的名字。

问题2:嵌套console.log导致额外打印undefined

speak方法内部已经执行了console.log输出内容,但方法本身没有返回值(默认返回undefined)。你在调用时又套了一层console.log,相当于打印speak()的返回结果,这就是你看到的undefined的来源。


修改后的完整代码

(function (window) {
  var helloSpeaker = {};
  var speak = "Hello";
  // 修改speak方法,接收name参数并直接使用
  helloSpeaker.speak = function (name) {
    console.log(speak + ' ' + name);
  }

  window.helloSpeaker = helloSpeaker;
})(window);

(function (window) {
  var byeSpeaker = {};
  var speak = "Good Bye";
  // 同样修改byeSpeaker的speak方法
  byeSpeaker.speak = function (name) {
    console.log(speak + ' ' + name);
  }

  window.byeSpeaker = byeSpeaker;
})(window);

(function () {
  var names = ["Yaakov", "John", "Jen", "Jason", "Paul", "Frank", "Larry", "Paula", "Laura", "Jim"];

  for (var i = 0; i < names.length; i++) {
    var firstLetter = names[i].charAt(0).toLowerCase();
    if (firstLetter === 'j') {
      // 直接调用speak方法,无需嵌套console.log
      byeSpeaker.speak(names[i]);
    } else {
      helloSpeaker.speak(names[i]);
    }
  }
})();

内容的提问来源于stack exchange,提问作者That Lady

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:28:01