Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用string.length+;反变量_Javascript_String_Function - Fatal编程技术网

Javascript 使用string.length+;反变量

Javascript 使用string.length+;反变量,javascript,string,function,Javascript,String,Function,我是编程新手,目前正在网上学习javascript。下面的代码来自一个教程,程序将在其中搜索字符串以查找名称。程序将在数组中循环,将每个字母与您姓名的第一个字母进行比较,如果它看到该字母: 它会将该字母及其后的所有字母推送到一个数组中,当它推送的字母数等于您姓名中的字母数时停止 我不明白的是这行:for(var j=I;j

我是编程新手,目前正在网上学习javascript。下面的代码来自一个教程,程序将在其中搜索字符串以查找名称。程序将在数组中循环,将每个字母与您姓名的第一个字母进行比较,如果它看到该字母: 它会将该字母及其后的所有字母推送到一个数组中,当它推送的字母数等于您姓名中的字母数时停止

我不明白的是这行:
for(var j=I;j<(myName.length+I);j++

为什么
j在您的内部循环中,您会这样做:

for(var j = i;
for(var j = 30; j < (30+4) ; j++) {
当满足条件
if(text[i]==“E”){
时,
i
的值非常高(30)

现在,执行此操作时:

for(var j = i; j < (myName.length); j++) {
for(var j = i; j < (myName.length+i); j++) {
for(var j=i;j<(myName.length);j++){
你基本上是这样做的-

 for(var j = 30; j < 4; j++) {
for(var j=30;j<4;j++){
因此循环永远不会开始;因为边界条件不满足

但是当您这样做时:

for(var j = i; j < (myName.length); j++) {
for(var j = i; j < (myName.length+i); j++) {
for(var j=i;j<(myName.length+i);j++){
那么你是这样做的:

for(var j = i;
for(var j = 30; j < (30+4) ; j++) {
for(var j=30;j<(30+4);j++){

因此,一切都按其应有的方式运行。

我希望您在未来的项目中不要使用上述代码:)


如果我理解正确,您提供的代码工作正常,但您不理解为什么?如果是,我的解释如下:

i
j
标记
text
中的位置
i
中初始化为零(var i=0;i
。循环的工作方式是,它将根据条件
i
计算
i
,如果为真,则它将运行代码块,执行迭代器(
i++
,意思是将1添加到i),然后通过再次计算条件来启动循环

您会注意到
j
被初始化为
i
,而不是零。因此,如果字符串
text
i
位置的字母是“E”,那么它将启动另一个循环,将
j
设置为
i
(在上述情况下为25),然后向前迭代你名字的长度..我相信这种情况让你感到困惑:

for(var j=i;j<(myName.length+i);j++){

让我来看看在这个循环中会发生什么:

首先,它将
j
设置到
text
中的当前位置,这方便
i
知道。因此,假设
i
已达到25。因此,循环通过
i
j
设置为25。现在,由于我们需要
text
的下一个四个字符,而不是前四个字符,因此设置了条件到
j<(myName.length+i)


由于“Eric”是四个字符,它会将
文本[25]
文本[26]
文本[27]
,和
文本[28]
添加到
点击次数中。如果你查看
文本
,你会注意到第25到28个字母是(应该是)你的名字。

我在这里看到了这段代码:它从哪里来?假设你有一个字符串“哈哈埃迪哈哈埃里克”,你的测试会不会错,因为它在发现“埃里克”的“E”之前发现了“埃迪”的“E”?你为什么不使用indexOf()呢方法?如果代码来自CodeAcademy的javascript教程。链接是,是的,字符串将在Eric之前返回Eddy。这仍然是一个初学者教程,所以我还没有学习indexOf()