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
相关产品推荐
相关产品推荐

