为什么我收到此错误Uncaught TypeError:无法读取属性' length'未定义的

时间:2014-12-08 16:08:37

标签: jquery

我想按字长排序这句话“这个帐户有一个未经证实的电子邮件地址”我该怎么办呢。

<script>
$(document).ready(function(){
var some = "";
xx  = "";
 var vText = "This account has an unconfirmed email address";
    slitTxt = vText.split(" ");
    for(i=0; i <= slitTxt.length; i++ ){
        xx = slitTxt[i].length;
        some = $('body').append(xx+" ")

    }


 });
 </script>

3 个答案:

答案 0 :(得分:1)

您正在检查确实存在或未定义的lastindex + 1,删除等于来自循环条件的符号替换&#34;&lt; =&#34;与&#34;&lt;&#34;

例如,如果数组长度为5,则使用&lt; = array.length表示检查5或小于5,此处第一个索引为0,last为4,因此5未定义

<script>
$(document).ready(function(){
var some = "";
xx  = "";
 var vText = "This account has an unconfirmed email address";
    slitTxt = vText.split(" ");
    for(i=0; i < slitTxt.length; i++ ){
        xx = slitTxt[i].length;
        some = $('body').append(xx+" ")

    }


 });
 </script>

答案 1 :(得分:1)

错误来自于这一行:

for(i=0; i <= slitTxt.length; i++ )

数组是0索引的,这意味着第一个单元格为0,但长度为1

因此,如果您的数组包含5个元素,则最后一个元素将为arr[4]arr[arr.length-1]

因此,当for循环中的条件为i <= slitTxt.length时,最后一次迭代将与slitTxt[slitTxt.length]相同,因此,它将为undefined

请尝试改为:

for(i=0; i < slitTxt.length; i++ )

答案 2 :(得分:0)

您可以使用map()代替for循环。例如:

&#13;
&#13;
var vText = "This account has an unconfirmed email address",
    slitTxt = vText.split(" ");
slitTxt.map(function(val, ind){$('body').append(val + " ");});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<html><body></body></html>
&#13;
&#13;
&#13;