TypeError:无法读取未定义的属性“length”

时间:2014-08-04 23:38:29

标签: push string-length

我正在尝试学习使用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数组记录到控制台。

原来我的变量必须高于其余的代码。谢谢你的帮助。

2 个答案:

答案 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;。