Javascript无法为变量赋值并导致中断-->;word5=(关键字[n]。长度);

Javascript无法为变量赋值并导致中断-->;word5=(关键字[n]。长度);,javascript,variables,variable-assignment,break,Javascript,Variables,Variable Assignment,Break,做一些javascript自学,程序本身非常简单。它在输入中搜索关键字,找到后,将索引值放入列表占位符中。(稍后我将开发代码以消除重复) 然而,一个障碍。我正在尝试做一些非常简单的事情。我所做的就是将变量words5分配给关键字[n].length。现在我发现了关键字[n]。当嵌套到document.write()中时,length会打印出正确的值。我还发现,关键字[n]嵌套到document.write()中时也会打印正确的值。但是,如果在document.write之外的代码中使用了其中一个

做一些javascript自学,程序本身非常简单。它在输入中搜索关键字,找到后,将索引值放入列表占位符中。(稍后我将开发代码以消除重复)

然而,一个障碍。我正在尝试做一些非常简单的事情。我所做的就是将变量words5分配给关键字[n].length。现在我发现了关键字[n]。当嵌套到document.write()中时,length会打印出正确的值。我还发现,关键字[n]嵌套到document.write()中时也会打印正确的值。但是,如果在document.write之外的代码中使用了其中一个,则会导致代码中断

我已经做了好几个小时了。我还没有找到解决办法。你们有什么线索吗?我用来测试它的代码被注释掉了

<html>
<body>

<script type="text/javascript">


function separate()
{
    contents = document.myForm.event.value;
    placeholders = [32342423, 253234523];
    keywords = [" in ", " at ", " on ", " for "];

    for(n=0;n<=keywords.length;n++)
    {
        for (i=0;i<=contents.length;i++)
        {
            //document.write(i,"+", i+keywords[n].length, keywords[n])
            //document.write(keywords[n].length)
            word5 = (keywords[n].length);
            //document.write(" " + contents.slice(i,i+word5) + " ")
            //if (contents.slice(i,i+4) == " at ")
            //if (contents.slice(i,i+wordlength) == " at ")
            //if (contents.slice(i,i+4) == keywords[n])
            if (contents.slice(i,i+word5) == keywords[n])
            {
                placeholders.push(i);
            }
        }
    }
    document.getElementById("sliced").innerHTML = placeholders;
    printer();
}


function printer()
{
    contents = document.myForm.event.value;
    document.getElementById("MSG").innerHTML = contents;
}
</script>



<form name="myForm" method="post">
Add Event: <input type="text" name="event" value="Whatever at hello at crazy" /><br />
<input type=button value="Submit" onClick="separate()" />
</form>

<SPAN ID="sliced">&nbsp;</SPAN>
<p></p>
<SPAN ID="MSG">&nbsp;</SPAN>



</body>
</html>

函数分离()
{
contents=document.myForm.event.value;
占位符=[32342423253234523];
关键词=[“in”,“at”,“on”,“for”];

对于(n=0;n我运行代码时得到的eror是:

wordlength is undefined
这导致代码失败。您在哪里定义
wordlength

更新

还要注意,当您在数组中循环时,数组的索引为零。也就是说,数组中的第一个项是项0。数组中的项数计数总是大于索引之和(索引和+1)


这基本上意味着当您使用
时,我运行代码时得到的eror是:

wordlength is undefined
这导致代码失败。您在哪里定义
wordlength

更新

还要注意,当您在数组中循环时,数组的索引为零。也就是说,数组中的第一个项是项0。数组中的项数计数总是大于索引之和(索引和+1)


这基本上意味着,当您使用
时,这不是破坏代码的原因,似乎您没有在代码的任何地方定义变量“wordlength”,这就是破坏代码的原因

word5=(关键字[n].length)实际上有效

此外,我还建议为firefox安装“firebug”插件,这是调试任何javascipt或html代码的最佳方式,使用控制台输出调试语句时使用“console.log(myvar)”而不是document.write,这是一种非常老式的方式

如果此解决方案不适用于您,请告诉我:)

编辑: 我做了另一组测试,发现了原因是,您的第一个循环比您当前的阵列数多运行1个,因此与其使其“也小于或等于”,不如使其小于:


for(n=0;n这不是破坏代码的原因,似乎您没有在代码的任何地方定义变量“wordlength”,这是破坏代码的原因

word5=(关键字[n].length)实际上有效

此外,我还建议为firefox安装“firebug”插件,这是调试任何javascipt或html代码的最佳方式,使用控制台输出调试语句时使用“console.log(myvar)”而不是document.write,这是一种非常老式的方式

如果此解决方案不适用于您,请告诉我:)

编辑: 我做了另一组测试,发现了原因是,您的第一个循环比您当前的阵列数多运行1个,因此与其使其“也小于或等于”,不如使其小于:


for(n=0;nJamie的回答指出了我能看到的唯一问题,除了:在函数中只使用全局变量,特别是循环计数器,这是自找麻烦。您应该使用“var”声明所有变量关键字,使其成为声明函数的本地变量,否则它们将成为所有函数都可以访问的全局变量。@Shinjitsu-尝试使用FireBug或Chrome的开发人员控制台。我知道的每个浏览器都有一个JavaScript控制台,用于查看错误。另外,请访问JSLint.com,它非常适合查找样式问题以及语法问题。Jamie的回答指出了我能看到的唯一问题,除了:在函数中只使用全局变量,特别是循环计数器,这是自找麻烦。您应该使用“var”声明所有变量关键字,使其成为声明函数的本地变量,否则它们将成为所有函数都可以访问的全局变量。@Shinjitsu-尝试使用FireBug或Chrome的开发人员控制台。我知道的每个浏览器都有一个JavaScript控制台,用于查看错误。另外,请访问JSLint.com,它非常适合查找样式问题以及语法问题。很好,这是一个太累的迹象。但即使在更新之后,仍然失败。我现在正在尝试学习如何使用firebug(谢谢!)。虽然如果你发现了一些不明显的问题,请告诉我。因为它仍然不起作用???我已经更新了上面的答案,这肯定会解决你的问题。哦,我明白了。非常感谢!我主要是通过IDLE学习python。默认的设置方式范围不会解决这个问题,而且IDLE会吐出一个much更多描述性错误消息(列表索引超出范围)。谢谢!很好的捕获,这是一种太累的迹象。但即使在更新之后,仍然失败。我现在正在尝试学习如何使用firebug(谢谢!)。虽然如果你发现了一些不明显的问题,请告诉我。因为它仍然不起作用???我已经更新了上面的答案,这肯定会解决你的问题。哦,我明白了。非常感谢!我主要是通过IDLE学习python。默认的设置方式范围不会解决这个问题,而且IDLE会吐出一个mu更多描述