Javascript二维数组在打印其他数组之前提供未定义的
为什么在列表项之前打印未定义的内容。不要在我犯错误的地方。请帮帮我。请考虑下面的代码片段Javascript二维数组在打印其他数组之前提供未定义的,javascript,html,arrays,Javascript,Html,Arrays,为什么在列表项之前打印未定义的内容。不要在我犯错误的地方。请帮帮我。请考虑下面的代码片段 var播放列表=[ [“野生动物”、“弗洛·里达”], [“翅膀”,“小鸟”], [“纯洁的爱”,“白狮”], [“握住我的手”,“杰西·格林”] ]; var listSongs=“”; 功能打印(msg) { 文件。写(“”+msg+“”); } 函数printSongs(歌曲) { for(var i=0;i
var播放列表=[
[“野生动物”、“弗洛·里达”],
[“翅膀”,“小鸟”],
[“纯洁的爱”,“白狮”],
[“握住我的手”,“杰西·格林”]
];
var listSongs=“”;
功能打印(msg)
{
文件。写(“”+msg+“”);
}
函数printSongs(歌曲)
{
for(var i=0;i”+歌曲[i][0]+“+”,由“+歌曲[i][1]+””;
}
listSongs+=“”;
印刷(歌曲列表);
}
var box=document.getElementById(“容器”);
document.onLoad(box.innerHTML=打印歌曲(播放列表))代码>
打印和打印歌曲实际上不返回任何内容,因此它们返回未定义的内容
改变
document.write(...stuff...);
到
及
到
这是因为printSongs
函数不返回任何特定值。如果未指定返回值,函数将返回未定义的值
当您从load
事件运行代码时(或至少尝试),不应使用document.write
。加载页面后,使用document.write
将隐式调用window.open
,以便创建一个新页面来替换当前页面
从函数返回HTML代码,而不是将其写出:
var播放列表=[
[“野生动物”、“弗洛·里达”],
[“翅膀”,“小鸟”],
[“纯洁的爱”,“白狮”],
[“握住我的手”,“杰西·格林”]
];
功能打印(msg){
返回“”+msg+””;
}
函数printSongs(歌曲){
var listSongs=“”;//应该是开始标记,而不是结束标记
for(var i=0;i”+歌曲[i][0]+“+”,由“+歌曲[i][1]+””;
}
listSongs+=“”;
返回打印(列表歌曲);
}
//属性名为onload,而不是onload,它位于窗口对象中
//它不是一个函数,你给它分配了一个函数
window.onload=函数(){
//获取加载事件处理程序中的元素
var box=document.getElementById(“容器”);
box.innerHTML=打印歌曲(播放列表);
};代码>
我认为有几个问题:
- 首次初始化
列表歌曲时,需要将其设置为开头标记
,而不是结尾标记。所以它应该变成:listSongs=代码>
- 主要问题是
文档。在print
函数中写入。您可能不需要这样做,因为您已经希望将box
元素的innerHTML
设置为由printSongs
可以返回的内容填充
- 因此,在
printSongs
中包含return
语句,以在循环完成后返回所有listSongs
片段:
var播放列表=[
[“野生动物”、“弗洛·里达”],
[“翅膀”,“小鸟”],
[“纯洁的爱”,“白狮”],
[“握住我的手”,“杰西·格林”]
];
var listSongs=“”;
函数printSongs(歌曲){
for(var i=0;i”+歌曲[i][0]+“+”,由“+歌曲[i][1]+””;
}
listSongs+=“”;
返回列表歌曲;
}
var box=document.getElementById(“容器”);
box.innerHTML=打印歌曲(播放列表)
难道“listSongs”不应该成为一种音乐吗?(打开标签和不关闭标签)。@Mr.Web打印和打印歌曲是不同的功能。es6也给我们提供了尾部呼叫消除功能,但它并不能满足您的要求thinking@GeorgeSimms对不起,我弄错了。
return ...stuff...;
print(listSongs);
return print(listSongs);