为啥代码实现出来的效果不对

为啥代码实现出来的效果不对

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title> </title>
</head>
<body>
<script>
    //补充代码
    var input=prompt("请输入登录邮箱");
    for(var i=0;i<input.length;i++){
        if(num>0){
            var num=input.indexOf("@");
            var name=input.slice(0,num);
            var address=input.slice(num+1);
            document.write("邮箱的用户名是:"+name+"<br/>");
            document.write("登录的邮箱域名是:"+address);
        }else{
            input=prompt("请输入正确格式");
        }
    }
</script>
</body>
</html>


正在回答

登陆购买课程后可参与讨论,去登陆

4回答

同学你好, 

  1. 因为本节练习主要是侧重练习前一小节所学的字符串分割方法,  关于邮箱的验证,后面阶段我们会学习正则表达式, 老师会进行详细讲解的, 目前阶段,同学可以不对邮箱格式做严格的验证, 所以老师根据同学的代码, 只是做了简单的修改,通过长度判断是否输入的有内容

  2. 同学粘贴的这段代码, 使用for的逻辑就是不对的, 可以参考下图注释的分析, 这段代码的逻辑问题如下

    (1)首先, 用户已经输入对的情况下,还会多次弹出输入框

    (2)然后, 如果在多次弹出框的过程中,用户不小心输错了一次, 那么input会被重新赋值,导致结果不正确。

    http://img1.sycdn.imooc.com//climg/5d8b4bc809894b4410770859.jpg

  3. 可以修改为while循环, 结合break关键字实现效果, 示例:

    http://img1.sycdn.imooc.com//climg/5d8b4da609259ae809390437.jpg

  4. 建议:同学以后提问,可以详细的描述一下问题,例如这个题:可以说我想要通过用户输入的内容中是否有@字符,判断输入的是不是邮箱, 然后我想要的具体效果是什么,便于老师准确高效的帮助您解决问题哦

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~~


好帮手慕慕子 2019-09-25 17:46:01

同学你好,  因为代码执行顺序是从上到下的, 所以在使用var声明前使用变量,是没有值的。 

示例:

http://img1.sycdn.imooc.com//climg/5d8b362509faa05002710070.jpg

http://img1.sycdn.imooc.com//climg/5d8b362a09b1899801630036.jpg

同学这种写法, 整体思路实现就是有一点问题, 即使将num声明放在前面, 

http://img1.sycdn.imooc.com//climg/5d8b365d098cb73009660405.jpg

测试结果, 因为循环的条件是小于字符串的长度,导致对此无用的循环

http://img1.sycdn.imooc.com//climg/5d8b366c09c603e704850279.jpg

所以还是建议同学参考老师第一次回答给出的修改方案, 使用while循环实现效果

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~~

  • 提问者 慕侠5902054 #1
    var input=prompt("请输入登录邮箱"); var num=input.indexOf("@"); var name=input.slice(0,num); var address=input.slice(num+1); for(var i=0;i<input.length;i++){ if(input[i]=="@"){ document.write("邮箱的用户名是:"+name+"<br/>"); document.write("登录的邮箱域名是:"+address); }else{ input=prompt("请输入正确"); } } 我还有一个是这样写得也不行,我用for遍历,找出是否存在@也不行
    2019-09-25 17:47:41
  • 提问者 慕侠5902054 #2
    而且昨天您给的方法,用input.length去判断并不能判断他是否是一个邮箱,我是想用@判断他是否是一个邮箱
    2019-09-25 17:56:50
好帮手慕慕子 2019-09-25 09:48:42

同学你好, 因为你原来的代码, num后定义先使用, 所以num的值为undefined, 那么if中的num > 0这种写法等同于 undefined > 0, 导致if条件不成立, 执行else语句。

建议: 同学参考老师上次回答提供的方式修改代码哦

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~~


  • 提问者 慕侠5902054 #1
    我定义了num=input.indexOf的
    2019-09-25 16:39:37
好帮手慕慕子 2019-09-24 19:06:49

同学你好, 因为先使用num, 之后才声明, 导致无法实现效果。

建议: 可以不用for循环, 直接通过if判断用户输入的是否正确即可

http://img1.sycdn.imooc.com//climg/5d89f7f509e960ce07290460.jpg

修改后,测试可以实现效果

http://img1.sycdn.imooc.com//climg/5d89f81309817e9a04330167.jpg

http://img1.sycdn.imooc.com//climg/5d89f81a09036ac902950064.jpg

如果同学想要实现循环弹出输入框,直到用户输入正确的格式, 可以通过while循环实现效果, 因为使用for循环, length存在问题。无法实现效果

http://img1.sycdn.imooc.com//climg/5d89f89f0936bad207390534.jpg

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~


  • 提问者 慕侠5902054 #1
    while里面的true是判断什么条件为true呢
    2019-09-24 19:07:47
  • 好帮手慕慕子 回复 提问者 慕侠5902054 #2
    你好, 这里不是为了判断什么条件哦, 设置为true主要是为了满足while循环, 实现一直循环下去的效果, 只有在循环中通过if判断满足条件,才退出循环哦, 否有就一直弹出输入框哦,同学可以测试一下, 结合代码实现的效果帮助自己更好的理解哦, 祝学习愉快~~~~
    2019-09-24 19:12:01
  • 提问者 慕侠5902054 回复 好帮手慕慕子 #3
    那我那个for循环为啥不行哇
    2019-09-24 19:14:35
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师