我正在尝试学习使用CodeAcademy编程,我无法弄清楚如何修复此代码。我应该制作一个程序,在一个文本块中找到我的名字(Tim)。我一直收到错误:TypeError:无法读取未定义的属性'length',我无法找到我的生活中我做错了什么。你们能帮忙吗?
/*jshint multistr:true */
for(i=0;i<text.length;i++){
if(text[i]==="T"){
for(var j=i; j<myName.length+1;j++){
hits.push(j);
}
}
}
var text="Tim went to the store. When he got there, Tim got milk. Isn't Tim the best?";
var myName="Tim"
var hits=[]
if(hits.length =0){
console.log("Your name wasn't found!");
}
else{
console.log(hits);
}
此外,这是它给出的说明:
完美!您现在已经启动了搜索程序的引擎。它会: 循环通过阵列, 将每个字母与您姓名的第一个字母进行比较,如果它看到该字母: 它会将该字母及其后面的所有字母推送到数组中,当它推送的字母数等于您名字中的字母数时停止。 说明 在您现有的代码下(以及所有循环之外!),设置if / else语句。如果您没有任何点击,请记录“找不到您的姓名!”到控制台。否则,将hits数组记录到控制台。
原来我的变量必须高于其余的代码。谢谢你的帮助。
答案 0 :(得分:2)
移动:
var hits = [];
var text="Tim went to the store. When he got there, Tim got milk. Isn't Tim the best?";
var myName="Tim"
在你的for循环之上:
var hits = [];
var text="Tim went to the store. When he got there, Tim got milk. Isn't Tim the best?";
var myName="Tim"
for(i=0;i<text.length;i++){
if(text[i]==="T"){
for(var j=i; j<myName.length+1;j++){
hits.push(j);
}
}
}
答案 1 :(得分:0)
在Javascript中,只有变量声明被移动到脚本的顶部(http://www.w3schools.com/js/js_hoisting.asp)。
变量初始化不会移到顶部。
基本上,原始代码转换为 -
var text; var myName; var hits; //Only the variables declaration is hoisted to the top.
/*jshint multistr:true */
for(i=0;i<text.length;i++){
if(text[i]==="T"){
for(var j=i; j<myName.length+1;j++){
hits.push(j);
}
}
}
Variables are still initialized in the same place.
text="Tim went to the store. When he got there, Tim got milk. Isn't Tim the best?";
myName="Tim"
hits=[]
if(hits.length =0){
console.log("Your name wasn't found!");
}
else{
console.log(hits);
}
因此,当JS引擎尝试在第3行执行text.length时,文本未定义&#39;。