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