Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 for循环中的or条件导致无限循环_Javascript_Loops_Conditional Operator - Fatal编程技术网

Javascript for循环中的or条件导致无限循环

Javascript for循环中的or条件导致无限循环,javascript,loops,conditional-operator,Javascript,Loops,Conditional Operator,作为一个学术练习,我正在编写一个函数,该函数将电子邮件地址作为字符串,将其拆分为两个,删除“@”,然后将拆分后的两个字符串放入一个数组中。放置在数组中的两个项是本地名和域名。例如bob@yahoo.com将变成array=['bob','yahoo.com']。在本练习中,我避免使用split()方法和正则表达式 我的代码在该条件下的循环的底部中断。条件中的|正在导致无限循环。我已经尝试了每个条件,循环运行正常。但是,我需要在条件中使用这两个语句(因为它会检查电子邮件末尾是否有空格,以及是否没有

作为一个学术练习,我正在编写一个函数,该函数将电子邮件地址作为字符串,将其拆分为两个,删除“@”,然后将拆分后的两个字符串放入一个数组中。放置在数组中的两个项是本地名和域名。例如bob@yahoo.com将变成
array=['bob','yahoo.com']
。在本练习中,我避免使用
split()
方法和正则表达式

我的代码在该条件下的
循环的底部
中断。条件中的
|
正在导致无限循环。我已经尝试了每个条件,循环运行正常。但是,我需要在条件中使用这两个语句(因为它会检查电子邮件末尾是否有空格,以及是否没有空格)

我尝试过交换条件,但找不到导致无限循环的任何原因。为什么这里的代码会被破坏,如何解决

var email = ' paul@hotmail.com ';

function checkE(email) {
  var arr = [];
  var local = '';
  var domain = '';
  var i = 0;

  while(email[i] == ' ') {

      i++
  }

for(var j = i; email[j] != '@'; j++) {

    local = local + email[j];
    i++
}
arr.push(local);

for(var k = i+1; email[k] != ' ' ||  k < email.length ; k++) {
    domain = domain + email[k];
}
arr.push(domain);
alert(arr);
}
checkE(email);
var电子邮件=”paul@hotmail.com ';
功能检查(电子邮件){
var-arr=[];
局部变量=“”;
var域=“”;
var i=0;
while(电子邮件[i]=''){
我++
}
对于(var j=i;email[j]!='@';j++){
本地=本地+电子邮件[j];
我++
}
arr.push(本地);
对于(var k=i+1;email[k]!=“k
您的问题在以下陈述中:

email[k] != ' '
如果
email[k]=''
email[k]==null
,您的代码将中断

|
替换为
&&

由于
| |

k < email.length

将允许循环运行,因为
null!=''

终止循环的条件不正确。应该是

for(var k = i+1; email[k] != ' ' &&  k < email.length ; k++) {
    domain = domain + email[k];
}
for(var k=i+1;email[k]!=''&&k

请注意,条件(email[k]!=“k电子邮件相同。长度

这两个条件中的一个最有可能始终为真

比如说电子邮件paul@hotmail.com '; 电子邮件长度等于17

电子邮件[16]等于“”,因此
电子邮件[k]!=“”
计算结果为false,但我们尚未达到电子邮件的长度,因此
k
为true;因此,我们将进入循环

电子邮件[17]等于空,因此
email[k]!=''计算结果为true。即使我们已经到了字符串的末尾,
k
为false

在java等其他语言中,如果访问数组中大于数组中元素数的索引,则会出现IndexOutOfBounds异常。然而,Javascript允许您这样做,并且只返回null

您真正想要的是只在两个条件都为真时进行迭代,而不是一个或另一个

var length = email.length;
for(var k = i+1; k < length && email[k] != ' '; k++)
var length=email.length;
对于(var k=i+1;k

这篇关于修剪字符串的文章也可能对您有所帮助/启发:

我认为您需要
&
而不是
|
我需要数组在电子邮件地址末尾不返回空格。如果我使用
&&
的话,空格将被添加到
变量域
中,因此数组也会被添加。你试过了吗?因为它起作用了here@BiAiB抱歉,这很有效。起初我认为它没有发挥应有的作用。我使用了
email[k]!=''
在其自身的条件下运行,并且代码不会中断。@moonshineOutlaw:然后它可能会在第一个
'
处停止。这两个条件的组合允许它在整个
电子邮件中循环,然后继续循环,因为
k
大于
email.length
,并且
email[k]==null
导致
(email[k]!=“k
,因为
true | false
var length = email.length;
for(var k = i+1; k < length && email[k] != ' '; k++)