11.17 JS基础2

  • 发现昨天的学习记录有些繁琐,今天开始精简文章内容(凸出重点难点易遗漏点)
  • 课堂练习1数字累加求和,点击“计算”按钮,将结果显示在文本框中。1+2+3+N
<body>

<input type="text" value="10" id="num">
<input type="button" value="计算" id="btn">

<input type="text" value="0" id="result">

<script>
    //document.getElementById("btn").onclick
    //按钮的点击事件-》执行函数
    document.getElementById("btn").onclick = function fun01 (){

        //获取文本框的值 文本框.value
        let n=document.getElementById("num").value;
        //alert(typeof n);
        //定义一个循环 i<=10
        let sum=0;
        for(let i=1;i<=n;i++){
            sum+=i;
        }//得到result .value
        document.getElementById("result").value=sum;
    }
</script>
</body>

上图是老师的解法,下图是我个人的。

<body>

<input type="text" value="10" id="num">
<input type="button" value="计算" id="btn">

<input type="text" value="0" id="result">

<script>
    document.getElementById("btn").onclick = function (){

        let inp=document.getElementById("num").value;
//        let inp=parseFloat(document.getElementById("num").value);
        alert(typeof inp);

        let sum=0;
        for(let i=inp;i>=0;i--){
            sum+=i;
        }console.log(sum);
        document.getElementById("result").value=sum;
    }
</script>
</body>

发现:for循环中i的赋值(let i=inp)如果为文本框输入的值(即字符串类型),需要做类型转换,不然显示的是字符串拼接;而像老师所做的i<=n(n也是字符串类型)却可以成功得出数字而非字符串。。概因JS的机制。

 

  • 运算符

算术运算符除包括平常的加减乘除还包括:%(取余/取模)++(自增)--(自减)。

比较(关系)运算符包括:>, <, >=, <=, !=(不等), ==(等于), ===(全等)(Ps:其中==与===的区别要明确,如下图),得到的结果一定是true或者false。

//定义变量
let a=1;
console.log(a==1);
console.log(a>=1);
console.log(a<=1);
console.log(a!=1);
console.log(a===1);
console.log("********************");
let b="10";
console.log(b==10);//可以 使用两个等号==比较不同类型的数据,内容相同结果就为true
console.log(b=="10");//可以 使用两个等号==比较不同类型的数据,内容相同结果就为true
console.log(b===10);////可以 三个等号===比较同类型的数据,内容相同结果才为true
console.log(b==="10");//可以 三个等号===比较同类型的数据,内容相同结果才为true
console.log("********************");
let username = "admin";
console.log(username=="admin");
console.log(username==="admin");

总之,==比较不同数据类型,内容相同结果就为true;===比较相同数据类型,同时内容也要相同结果才为true。

运算符还包括赋值运算符:=, +=  -=   *=   /=;逻辑运算符:&&(逻辑与), ||(逻辑或), !(取反)(Ps:针对boolean值)。

当然,很多判断的时候,都不是单一条件,而是复合条件,比如说登录时用账号和密码,两者必须同时满足,才能成功登录(用到逻辑与)。

//登录 用户名/账号  密码

let name="admin";
let pass="123456";

//判断
console.log(name === "admin" &&  pass==="123456");

此外,位运算符也属于运算符的一种,不过暂时不细说。

 

  • 流程控制
  • 条件结构

常见的if条件句:

if(表达式(条件1),实为布尔类型){

        (如果条件1成立,则执行...);

}else if(条件2){

        (如果条件1不成立,且条件2成立,则执行...);

}else{

        (如果条件1和2都不成立,则执行...);

}

(Ps:值得注意的是,在一个if条件句中,else if(条件)如果有需要可以写很多次,但else{}只能写一次)

 

对于if条件语句,我们课堂上做了相关练习,这是老师的版本(基础版)。

<body>
<input type="text" id="age" placeholder="请输入你的年龄" value="18">
<input type="button" value="电影推荐" id="btn1">
<input type="button" value="书籍推荐">


<script>
    //按钮的单击事件
    document.getElementById("btn1").onclick = function fun01(){

        //得到用户输入的年龄
        let age = parseInt(document.getElementById("age").value);

        //条件判断
        if(age>0 && age<=3){
            //先alert
            alert("眼睛尚未发育完全,不建议观看.")
        }
        else if(age<=10){
            alert("《猫和老鼠大战凹凸曼》!")
        }
        else if(age<=18){
            alert("《哪吒之魔童降世》")
        }else if(age<=30){
            alert("《楚门的世界》")
        }else{
            alert("还要别人推荐吗?")
        }
    }

</script>

这是我的练习(之前就想尝试把prompt()弹窗中输入的值获取到页面文本框中)

<body>
<!--<input type="text" id="age" placeholder="请输入你的年龄" value="18">-->
<!--<input type="button" value="电影推荐" id="btn1">-->
<input type="button" value="书籍推荐" id="btn2">
<input type="text" id="book" value="">
<script>
//    let age=prompt("请输入您的岁数", "");
    //按钮的单击事件
    document.getElementById("btn2").onclick=function func(){
        //得到用户输入的年龄
        let age=prompt("请输入您的岁数", "");
        //let age=parseInt(document.getElementById("age").value);
        //条件判断
        if(age>0 && age<=3){
            document.getElementById("book").value="尚未接受教育,不看";
        }else if(age<18){
            document.getElementById("book").value="《家》";
        }else if(age<30){
            document.getElementById("book").value="《三国演义》";
        }else{
            document.getElementById("book").value="《活着》";
        }
    }
</script>
</body>

后续我们又进行了优化(毕竟,之前基础版的实在简陋。。弹窗对于用户也很不友好)。

我们增加了提示信息显示,希望能在页面上直接展示,而不是弹窗输出。另外,我们也增加了电影简介,图片和视频展示。

<body>
<input type="text" id="age" placeholder="请输入你的年龄" value="">
<input type="button" value="电影推荐" id="btn1">
<input type="button" value="书籍推荐">
<div>
    <h4 id="fname">电影名称</h4>

    <p id="bi">简介</p>

    <p style="display: inline-block">
        <!--行内样式-->
        <img src="imgs/default.png" id="pic" style="width: 200px ;height: 300px">
    </p>

    <p style="display: inline-block">
        <video src="video/cat.mp4" controls="controls" autoplay="autoplay" id="v" width="600px" height="300px"></video>
    </p>
</div>


<script>
    //按钮的单击事件
    document.getElementById("btn1").onclick = function fun01() {

        //得到用户输入的年龄
        let age = parseInt(document.getElementById("age").value);
        //将提示信息存储在一个变量中
        let msg = "暂无推荐.";
        //将简介保存在一个变量中
        let bi = "简介(略..)";
        //将图片保存在一个变量中
        let img = "default.png";
        //将电影保存在一个变量中
        let vid = "default.mp4";

        //条件判断
        if (age > 0 && age <= 3) {
            //先alert
            msg = "眼睛尚未发育完全,不建议观看.";
        }
        else if (age <= 10) {
            msg = "《猫和老鼠大战凹凸曼》!";
            bi = "简介:Tom and Jerry";
            img = "cat.png";
            vid = "cat.mp4";
        }
        else if (age <= 18) {
            msg = "《哪吒之魔童降世》";
            bi = "简介:第33届中国电影金鸡奖 最佳美术片";
            img = "nn.png";
            vid = "nn.mp4";
        } else if (age <= 30) {
            msg = "《楚门的世界》";
            bi = "简介:The Truman Show";
            img = "chmen.png";
            vid = "chmen.mp4";
        } else {
            msg = "还要别人推荐吗?";
        }

        //将信息显示在div的h4中
        document.getElementById("fname").innerHTML = "<span style='color: blue'>" + msg + "</span>";
        //简介
        document.getElementById("bi").innerHTML = "<span style='color:pink'>" + bi + "</span>";
        // 图片
        document.getElementById("pic").src = "imgs/" + img;
        //电影
        document.getElementById("v").src = "video/" + vid;

    }

</script>
</body>

 难点在于document.getElementById("xxx')和if循环结合。

之前input标签中我们取id赋值(例:document.getElementById("xx").value=xxx;)用的是.value,而p标签没有value,要用(document.getElementById("xx").innerHTML=xxx;),里面还可以加样式,如 document.getElementById("xx").innerHTML="<span style='color:blue'>"+a+"</span>"(字符拼接)

 

  • switch

结构:

<script>
    switch(常量){
        case 常量值1:
            //语句
            break;
        case 常量值2:
            //语句
            break;
        case 常量值3:
            //语句
            break;
        case 常量值4:
            //语句
            break;
        default :
            //语句
            break;
    }
</script>
<script>
    let n=2;
    // 小括号内表达式计算的时候会得到一个结果
    //n*2 和case后面的常量值进行比较 ,如果"相等",只能是相等,无法做区间的判断.
    //switch(n*2){
    //如果所有case和常量表达式结果都不相等,那么将会执行default,
    // default相当于if结构里的else.只能有一个,当然也可以省略
    //break也可以省略,但是不会跳出switch结构,会按顺序从上往下运行下去。
    switch(n){
        case 常量值1:
            //语句
            console.log("猪脚饭");
            break;
        case 常量值2:
            //语句
            console.log("沙茶面");
            break;
        case 常量值3:
            //语句
            console.log("漳州卤面");
            break;
        case 常量值4:
            //语句
            console.log("手枪腿");
            break;
        default :
            //语句
            console.log("汉堡");
            break;
    }
</script>

练习和作业:

1.用户在文本框中输入一个正整数,我们求这个数的阶乘。

<body>
<input type="text" id="num" value="" placeholder="请输入一个正整数">
<input type="button" id="btn1" value="阶乘">
<input type="text" id="answer">
<script>
    document.getElementById("btn1").onclick=function jieCheng(){
        let num=document.getElementById("num").value;
        let sum=1;
        if(num>0){
            for(let i=1;i<=num;i++){
                sum*=i;
            }document.getElementById("answer").value=sum;
        }else{
            document.getElementById("answer").value="您输入的不是正整数,再见";
        }
    }
</script>
</body>

2.完成简单的数学运算,实现两个数字的  + - * /即可。

<body>
<input type="text" id="num1" value="" placeholder="请输入一个数字">
<input type="button" id="add" value="+">
<input type="button" id="minus" value="-">
<input type="button" id="multi" value="*">
<input type="button" id="sep" value="/">
<input type="text" id="num2" value="" placeholder="请输入一个数字">
=<input type="text" id="result" value="" placeholder="此处显示结果">

<script>

    document.getElementById("add").onclick = function add() {
        let num1 = parseFloat(document.getElementById("num1").value);
        let num2 = parseFloat(document.getElementById("num2").value);
        let result = 0;
        result = num1 + num2;
        document.getElementById("result").value = result;
    }

    document.getElementById("minus").onclick = function minus() {
        let num1 = parseFloat(document.getElementById("num1").value);
        let num2 = parseFloat(document.getElementById("num2").value);
        let result = 0;
        result = num1 - num2;
        document.getElementById("result").value = result;
    }

    document.getElementById("multi").onclick = function multi() {
        let num1 = parseFloat(document.getElementById("num1").value);
        let num2 = parseFloat(document.getElementById("num2").value);
        let result = 0;
        result = num1 * num2;
        document.getElementById("result").value = result;
    }

    document.getElementById("sep").onclick = function sep() {
        let num1 = parseFloat(document.getElementById("num1").value);
        let num2 = parseFloat(document.getElementById("num2").value);
        let result = 0;
        result = num1 / num2;
        document.getElementById("result").value = result;
    }

</script>
</body>

Ps:这道题也可以用switch解,看对题目的理解,可用多个文本框,也可用4个按钮表示加减乘除。

<body>
<input type="text" id="num1" value="" placeholder="请输入一个数字">
<input type="text" id="code" value="" placeholder="请输入一个运算符号">
<input type="text" id="num2" value="" placeholder="请输入一个数字">
=<input type="text" id="result" value="" placeholder="此处显示结果">
<input type="button" id="btn1" value="计算">

<script>
    document.getElementById("btn1").onclick = function cal() {
        let num1 = parseFloat(document.getElementById("num1").value);
        let num2 = parseFloat(document.getElementById("num2").value);
        let code = document.getElementById("code").value;
        let result;
        switch (code) {
            case "+":
                result = num1 + num2;
                document.getElementById("result").value = result;
                break;
            case "-":
                result = num1 - num2;
                document.getElementById("result").value = result;
                break;
            case "*":
                result = num1 * num2;
                document.getElementById("result").value = result;
                break;
            case "/":
                result = num1 / num2;
                document.getElementById("result").value = result;
                break;
        }
    }
</script>
</body>

3.用户在文本框中输入年和月份,我们输出这年的这个月有多少天。

<body>
<input type="text" id="year" value="">年
<!--年-->
<input type="text" id="month" value="">月
<!--月-->
<input type="button" id="btn1" value="算天数">
<input type="text" id="days" value="">天
<!--天数-->
<script>
document.getElementById("btn1").onclick=function sumDays(){
    let y=parseInt(document.getElementById("year").value);
    let m=parseInt(document.getElementById("month").value);
    let days;
    switch (m) {
        case 1:
            days = 31;
            break;
        case 2:
            if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
                days = 29;;//闰年
            } else {
                days = 28;//平年
            }
            break;
        case 3:
            days = 31;
            break;
        case 4:
            days = 30;
            break;
        case 5:
            days = 31;
            break;
        case 6:
            days = 30;
            break;
        case 7:
            days = 31;
            break;
        case 8:
            days = 31;
            break;
        case 9:
            days = 30;
            break;
        case 10:
            days = 31;
            break;
        case 11:
            days = 30;
            break;
        case 12:
            days = 31;
            break;
    }
    document.getElementById("days").value = days;
}
</script>
</body>

(笨办法。。)

稍稍精简:

<body>
<input type="text" id="year" value="">年
<!--年-->
<input type="text" id="month" value="">月
<!--月-->
<input type="button" id="btn1" value="算天数">
<input type="text" id="days" value="">天
<!--天数-->
<script>
document.getElementById("btn1").onclick=function sumDays(){
    let y=parseInt(document.getElementById("year").value);
    let m=parseInt(document.getElementById("month").value);
    let days;
    switch (m) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10 :
        case 12:
            days = 31;
            break;
        case 2:
            if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
                days = 29;;//闰年
            } else {
                days = 28;//平年
            }
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            days = 30;
            break;
    }
    document.getElementById("days").value = days;
}
</script>
</body>

By the way, 想起来今天还学了一个Math.random()的函数。

<script>
    //for(let i=1;i<=100;i++)
    console.log(Math.floor(Math.random()*18+1));//得出0-18之间的随机数
    //Math.floor()向下取整
</script>

 

感想:

要说今天遇到的难点。。在于老师留下的第三题作业,也不是说难。。是忘记了类型的转换,number弄成了object。。尴尬

(Ps:关于今日基金感想,买的烂的还是一蹶不振,好的还是那么好,该跑则跑,不要太犹豫,免得丧失更多机会成本!)

18:18:28 2021-11-17

posted on 2021-11-17 18:18  heyiyang1312  阅读(5)  评论(0)    收藏  举报

导航