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