JS基础学习

一.

JS基本用法

1.1  输入输出语句

 <script>
        // [输出语句]
        // 用于在浏览器中弹出警告框
        // alert('未满18岁禁止访问!')
        // 用于控制台输出信息
        // console.log("111")
        // 用于在网页中输出内容
        // document.write("三月请对我好一点")
        // 输入语句
        // 在网页中弹出一个输入框
        // prompt("请输入姓名")
        // 在网页中弹出一个确认框
        // confirm("你真的满18岁了吗?")
</script>
eg:
<script>
    alert('未满24岁禁止访问!')
    console.log('Not Found!')
    prompt("请输入你的年龄")
    confirm("是否满24岁")
    document.write("404错误")
</script>

1.2  JS代码引入方式

 <!-- js行内写法 -->
    <!-- onclick点击事件 -->
  <button onclick="window.alert('别点了,再点人就傻了')">请点我</button>  

  <!-- 嵌入式 -->
  <scrip>window.alert("内部样式")</script>

  <!-- 外链式 -->
  <script src="./外链式.js"></script>

这个则是教你怎么将代码代入到我们所需要的地方,所以需要新建一个.js以代入代码

二.

JS基本语法

2.1    变量

2.1.1  变量的声明与赋值

 <script>
        // [先声明后赋值]
        var boy;
        var girl;
        console.log(boy); //underfined(未定义的)
        console.log(girl);
        // 为变量赋值
        boy = "jack";
        girl = "lily";
        console.log(boy);  //jack
        console.log(girl); //lily
        // 声明并赋值
        var myAge = 16;
        var myHeight = 188;
        console.log(myAge);
        console.log(myHeight);
</script>
这是变量的声明与赋值的方法,当然也是一个十分基础且简单的方式
Eg:
<script>
        var name = prompt("请输入你的名字")
        console.log(name);
        alert(name + '欢迎来到js的世界')
        document.write('希望你成为前端开发的高手')
    </script>

2.1.2       let声明变量

<script>
        // let是ES6新引入的关键字,用来替代var关键字.
        // (ES6指2015推出的ECMAScript语法)
        
        // 使用var声明的变量,可以多次赋值,但是其结果只与最后一次赋值有关
        var boyFriend ="暗区突围"
        var boyFriend ="Flead"
        console.log(boyFriend);

        // let不允许在一个代码块里有变量和他取一样的名字,但是允许修改同一个变量值
        // 一个花括号{}就是一个代码块
        let girlFriend ="林正英"
        console.log(girlFriend);
     </script>

由此可见let语句具有唯一性

                                                                                                                            

2.1.3    变量声明区别

 (1)初始化要求不同,

    使用var和let声明变量时可以先不初始化,而使用const声明变量时必须初始化。

    (2)重复声明不同,

    使用var和let声明的变量可以多次被修改,其值只与最近一次赋值一致,

    而使用const声明的变量,在整个运行过程中不能修改初值。

   

    (3)对块级作用域的支持不同。

    使用一对花括号括起来的代码称为一个代码块所谓块级作用域,

    就是指变量起作用的范围是当前代码块,离开当前代码块,变量就失效了。

    使用var声明的变量支持全局作用域,使用let和const声明的变量支持块级作用域。

      

2.2  数据类型                                                                                                       

2.2.1  数据类型分类 

 简单数据类型存储在栈内存中

        复杂数据类型存储在堆内存中

2.2.2  基本数据类型

 <script>
        // [Boolean-布尔型]
        let flag1 = true;
        let flag2 = false;

        // True,False,TRUE,FALSE这些写法都是错的

        console.log(flag1);

        let flag3 ="true"
        console.log(flag3); 

        // [number-数字型]
        let age =18;
        let date ="0306";
        console.log(age);
        console.log(date);

        console.log(Number.MAX_VALUE);     //最大值
        console.log(Number.MAX_VALUE*2);   //Infinity(无穷大)

        var a =3-"b"
        console.log(a);  //NaN (Not a Number)  NaN也属于数字类型

        // isNaN判断是否是一个非数字.
        // 如果是数字类型则为false
        // 如果是非数字类型则为true
        console.log(isNaN(a));  //true
        console.log(isNaN(111));  //false
        console.log(isNaN(Infinity));  //false
        console.log(isNaN("false"));  //true

        // [string-字符串]
        let demo1 = "字符串";
        let demo2 = '字符串';
        let demo3 =`字符串`;
        let demo4 = "老师说`今天晚上不上晚自习`";

        // [undefined-未定义的]
        // 表示声明的变量还未赋值
        let grade;
        console.log(grade); //undefined

        // [null-空]
        var a=null;
        console.log(a);  //null
    </script>

2.2.3   数据类型检测 

<script>
        //  isNaN 检测是否是一个非数字

        // typeof()

        console.log(typeof("123"));  //string
        console.log(typeof(false)); //boolean
        console.log(typeof(NaN));  //number
        console.log(typeof(Infinity));  //number
        console.log(typeof("true"));  //string
        console.log(typeof(undefined)); //undefined
        console.log(typeof(null));  //object

        console.log(typeof('aaa'*2)); //Number
        console.log("aaa"*2); //NaN

        console.log(2-"true"); //NaN
        console.log(typeof(2-"true")); //Number

        // 布尔类型true,会在运算中转化为数字1
        // 布尔类型false,会在运算中转化为数字0
        console.log(2-true);  //1
        console.log(typeof(2-true));  //Number

        // 加号遇上字符串,做拼接使用
        console.log(2+"true");  //2true
        console.log(typeof(2+"true"));  //string

        console.log(2+true);  //3
        console.log(typeof(2+true));  //number
    </script>

2.2.4  数据类型转换 

<script>
        // 将数据类型转换为布尔类型
        // 字符串类型和数字类型都会转化为布尔类型的true
        // 空字符串转为布尔类型的false,空格字符串转为true
        // 数字0转为布尔类型的false

        // Boolean()


        var a =Boolean("a")
        console.log(a);//true

        console.log(Boolean(123)); //true

        console.log(Boolean(""));  //false

        console.log(Boolean(" ")); //true

        console.log(Boolean(0));  //false

        console.log(Boolean(NaN)); //false

        console.log(Boolean(undefined)); //false

        console.log(Boolean(null));  //false

        // [将数据转化为字符串]
        // 使用String()或toString()进行转换

        let num =1;

        console.log(num); 

        let num2=String(num); //数字类型的

        console.log(num2); //1字符串类型1

        // [将数据转化为数字类型数据]
        // Number(用于将数据转化为数字型数据)
        console.log(Number(123)); //123
        console.log(Number("123")); //123
        console.log(Number("")); //0
        console.log(Number(" ")); //0
        console.log(Number(null)); //0
        console.log(Number(undefined)) //NaN
        console.log(Number(false)); //0
        console.log(Number(true)); //1
        console.log(Number("true")); //NaN
        console.log(Number("123.1")); //123.1
        console.log(Number("123.a")); //NaN
    </script>

2.3   运算符 

2.3.1  算术运算符

 <script>
        let a =10;
        let b =70;
        
        // 加法运算
        console.log(a+b); //80

        // 减法运算
        let c =b-a;
        console.log(c); //60

        // 乘法运算
        console.log(c*b) //420

        // 除法运算
        b=b/a;
        console.log(b); //7

        // 取模运算 取余数
        console.log(26%5); //1

        // 幂运算
        console.log(2**10); //1024
        // 2*2*2*2*2*2*2*2*2*2
        
    </script>

2.3.2    字符串运算符&隐式转换 

<script>
        console.log(1+1); //2
        console.log(1+null); //1
        console.log(1+true); //2
        console.log(1+false); //1

        console.log("12"-0);
        console.log(undefined *null) //NaN
        console.log(Infinity++);  //Infinity


        console.log(1+"1"); //11
        console.log(1+"null"); //1null
        console.log(null+"undefined"); //nullundefined

        var name ="张三";
        var age =18;
        console.log(name+"的年龄是"+age)

    </script>
    <!-- 隐式转换:当两个数据类型不同时,JS会按照既定的规则进行转换
    
    字符串运算符:加号遇上字符串,做拼接使用
    -->

2.3.3    赋值运算符 

  <script>
        // 赋值
        let a=10;
        let b=20;
        let c=b-a;

        // 加等于/加并赋值 +=
        a +=b;
        // a=a+b
        console.log(a); //30
        console.log(b); //20

        a -=b;
        // a=a-b
        console.log(a);
        console.log(b);

        a+=b; //30
        a/=b; //0.5
        a%=b; //10
        a**=b; //
        console.log(a);

        let m=4;
        let n=6;
        // m*=n;
        console.log(m); //24
        console.log(n); //6

        m%=n;
        console.log(m); //4
        console.log(n); //6
        
    </script>

2.3.4    比较运算符

 <script>
        // != 不等于
        console.log(41!=5); //true
        console.log(4!=4); //false

        // !== 不全等
        console.log(5 !==5); //false

        // == 等等于
        console.log(4=="4"); //true
        
        // === 全等于
        console.log(4==="4");//false
    </script>

2.3.5  逻辑运算符 

 <!-- 
        && 逻辑运算符  一假则假
        || 逻辑或运算符 一真则真
     -->

     <script>
        console.log(true && true); //true
        console.log(false && true); //false
        console.log(true &&false); //false
        console.log(false &&false); //false

        console.log(3>2 && 2>1); //true
        console.log(3<2 && 2>1); //false
        console.log(3<2 && 2<1); //false

        console.log(true || true); //true
        console.log(true ||false); //true
        console.log(false ||true); //true
        console.log(false || false); //false

        console.log(3>2 || 2>1); //true
        console.log(3<2 || 2>1); //true
        console.log(3<2 || 2<1); //false

        console.log(0 || null); //null
        console.log(null || undefined); //undefined
        
        console.log(0 || 4<3); //false

        console.log(!(2>1)); //false
        console.log(!(2<1)); //true

        // 闰年判断
        // 能被400或者4整出 但是不能被100整除的年份
        var year =2023;
        var run=(year%400==0 ||year%4==0 ||year%100!=0)
        var result=run ? "闰年" : "平年" //三元表达式
       console.log(result);

     </script>

2.3.6    三元表达式 

 <script>
        // 条件表达式 ? 表达式 : 表达式2
        // 如果条件表达式的值为true,则返回表达式1的执行结果
        // 如果条件表达式的值为false,则返回表达式2的执行结果

        // var age=prompt("请输入你的年龄")
        // console.log(age);
        // var res =age >=18 ? "你已经是一名优秀的成年人了" : "你还是个宝宝"
        // document.write(res)

        // var num1=prompt("输入数字");
        // var num2=prompt("输入数字");
        // var res =num1>num2? num1:num2
        // document.write(res)

        var num1=prompt("输入数字");
        var res=num1>10 ? num1:"0"+num1
        document.write(res)
 
 </script>

2.3.7   运算优先级 

 <script>
        // 一元运算符>比较运算符>逻辑运算符(逻辑与>逻辑或) > 赋值运算符

        let a =3>5 && 2<7 && 3==4
        console.log(a); //false

        let b =3>5 || 2<7 && 3==="3"
        console.log(b); //false

        let c =2 == "2"
        console.log(c); //true

        let d =!c && (b||a) 
            console.log(d); //false
    </script>

4.1   流程控制 

4.1.1   选择结构

 <script>
        // 1.if语句
        // if (条件表达式) {代码段}

        // let age =prompt("请输入你的年龄")
        // if (age>=18) {
        //     document.write("你可以进入本网站")
        // } else{
        //     document.write("非法访问")
        // }
        
        //3.if..else  if..else语句(多分支)
        // if(条件表达式1){
        //     条件表达式1的结果
        // } else if(条件表达式2){
        //     条件表达式2的结果
        //  } else if (条件表达式3) {
        //         条件表达式3的结果
        //     } else  (除去123的结果)
        
            let grade=prompt("请输入你的成绩")
            if(grade==100){
              document.write("奖励试卷10套") 
        } else if(grade<=90 && grade>=80){
            document.write("成绩优秀")
                }else if (grade>=60 && grade<80) {
                    document.write("成绩合格")
     } else if (grade>=40 && grade<60){
           document.write("补考啦")
     } else if (grade>=20 &&grade<40){
        document.write(挂科)
     } else{
        document.write("劝退处理")
    }
    

    </script>

 

4.1.2 循环结构

1.  for语句

         for(初始变化量;条件表达式;操作表达式){

            循环体

         }  

 //  需求:在控制台输入1~100的整数
         for(var i = 1; i<=100  ; i++){
             console.log(i);
         }


        // 需求:在控制台输入0~100之间的偶数
         for(var i = 1; i<=100  ; i++){
            if (i%2==0){
            console.log(i);
            }
        }

        // 需求:计算0~100所有偶数的和
         var b=0;
         for(var i = 1; i<=100  ; i++){
            if (i%2==0){
                 b += i;
            console.log(i);
             }
         }
         console.log(b);

2.while语句

         while(条件表达式){循环体}

// 需求:输入1~100的整数
        // 初始变化量
         var i =1;
         while (i<=100){
             console.log(i);
             i++
         }
// 需求:
        // 弹出一个确认框:"我喜欢你,我们在一起好吗?"
        // 如果对方点击确定,弹出"那我们什么时候结婚?"
        // 如果点击否定,弹出"那我明天再问一遍"
       let yes=confirm("我喜欢你,我们在一起好吗?")
         console.log(yes);
            while (!yes){
           document.write("那我明天再问一遍");
           
         }
       document.write("那我们什么时候结婚?")

    //   需求:打印0~100之间所有偶数的和

     let num=0;var i=0;
     while (i<=100){
         i++
         if(i%2==0){
             console.log(i);
            
             num +=i;
         }
     }
         console.log(num);

        // 需求:
        // (1)让用户输入  用户名  和  密码(password)
        // (2)如果 用户为admin 并且 密码为123456,则跳出循环弹窗提示登录成功,
        // 否则让用户继续登录

         var name = prompt("请输入你的用户名")
         var password = prompt("请输入你的密码")
             while(name != 'admin' || password !='123456'){
               alert("重新输入")
                var name = prompt("请输入你的用户名")
         var password = prompt("请输入你的密码")
             }
             alert('登录成功')


   

3. do...while语句]
     while语句先判断条件表达式的值,在根据条件表达式的值是否执行循环体
     do...while语句会无条件执行1次循环体,然后再判断条件表达式的值
     再根据判断的值是否绝对继续进行循环

do {循环体}while (表达式)

 // 需求:在控制台输出1-100的整数
     var i=1;
     do{
         console.log(i)
         i++
     }
     while (i<=100)
    
    var i=0; var num=0;
     do{
        if(i%2==0){
         num+=i;
        }
         i++;
     }
     while (i<=100)
     console.log(num);
    do{
       i+=2;
        num+=i;
    
    }
    while (i<=100)
    console.log(num);

4.1.3  跳转语句

         1.break语句

 for(var i=1;i<=5;i++){

            if(i==3){
                console.log("吃到了一颗花生米")

                break;// 跳出了整个循环
            }
            console.log("我不吃牛肉"+i+"个古乐天")
        }
        // 我不吃牛肉1个古乐天
        // 我不吃牛肉2个古乐天
        // 吃到了一颗花生米

       2.continue语句

 for(var n=1;n<=5;n++){

            if(n==3){
                console.log("吃到了花生米");
                continue;
            }
            console.log("我吃到了第"+n+"颗花生米");
        }
        // 我吃到了第1颗花生米
        // 我吃到了第2颗花生米
        // 吃到了花生米
        // 我吃到了第4颗花生米
        // 我吃到了第5颗花生米

   break语句会立即跳出整个循环,也就是循环结束

        continue语句用来立即跳出本次循环,也就是跳过continue语句后面的代码,继续下一次循环

4.1.4  循环嵌套 

 // 需求:在控制台输出4列4行的"⭐"
         var str='';
        // 成列
         for(var i=1;i<=4;i++){
             // 成行
             for(var j=0;j<=4;j++){
                 str +="⭐"
             }

             // "\n"是换行的转义符
             str +="\n"
         }
         console.log(str);
             var a='';
         for(var i=1;i<=5;i++){
            for(var j=1;j<=i;j++){
             document.write("❤️")
            }  
        // (br/)换行标签                  
         document.write("<br/>")
        
            // 需求:输出金字塔
            var n = prompt("你想要造多少层金字塔")

            // 如果输入的不是数字,就转化为nan
            n = Number(n) && parseInt(n)

             console.log(Number(null)); //0
             console.log(parseInt(null)); //NaN

             console.log(parseInt("123.a")); //123
             console.log(Number("123.a")); //NaN

 逻辑与符号必须均满足Number和parseInt的效果

             如果有一方不满足,n的结果就是NaN

             那么isNaN(n)的值就为true

 if(isNaN(n)){
                alert("请输入一个数字")
            }
        var str=""
        // 循环行数
        for( i=1;i<=n;i++){

            // 循环空格
            var black=n-i;
            for(var k=0;k<black;k++){
                str +="  "
            }
            
            // 循环爱心
            var star=i*2-1
            for(var j=0;j<star;j++){
                str +="❤️"
            }
           
            str +="\n"
        }
        console.log(str);

第三章

数组

5.1初识数组

 数组是一种复杂数据类型

        用于讲一组数组集合在一起

        通过一个变量就可以访问一组数据

        数组之间通过逗号分隔

      数组中的"索引/下标",是从0开始计算的

  // 声明数组
        let class02 = ["tom",'lily','tony']
        // 打印数组
        console.log(class02);
        
        // 打印数组长度
        console.log(class02.length); //3

        // 打印数组下标为X的元素
        console.log(class02[0]); //'tom'
        console.log(class02[1]); //'lily'

        // 数组可以是任意类型的元素,例如字符串,数字,数组
        let arr1= [1,2,3,4,5,6]
        let arr2 = ['string',NaN,null,undefined,arr1]
        console.log(arr2);

5.2  创建数组

  // 1.以new Array()方式创建数组
        var arr = new Array();
        console.log(arr); //Array(0)
        var arr = new Array(5);
        console.log(arr); // [empty*5]
        arr = new Array("tom",'tony','bob')
        console.log(arr); // ["tom",'tony','bob']

        // 2. 使用数组字面量创建数组
        var mood = ['sad',,,,,,'happy']
        console.log(mood.length); //8
        console.log(mood[7]); //happy
        console.log(mood[6]);  // undefined
        console.log(mood[0]);  // 'sad'

1.获取元素长度

        数组名.length

         2.修改数组长度

        数组名.length = number

  var arr = [0,1,2,3]
        console.log(arr.length); // 4
        arr.length = 5
        console.log(arr); // [0,1,2,3,empty]
        arr.length = 3
        console.log(arr); // [0,1,2]

  3.添加数组元素

  arr[4] = 3
        console.log(arr); // [0,1,2,empty,3]

4.修改数组元素

   arr[0] = 1
        console.log(arr); // [1,1,2,empty,3]

5.删除数组元素

delete arr[3] 
        console.log(arr); // [1,empty,2,empty,3]

6.遍历数组

 let arr1 = [10,20,30,40,50,60]
        var sum =0;
        for (var i=0; i<arr.length; i++){
            sum += arr[i]
            // arr[0] 10     sum+10=0+10=10
            // arr[1] 20     sum+20=10+20=30
            // arr[2] 30     sum+30=30+30=60
            // arr[3] 40
            // arr[4] 50
            // arr[5] 60
            // arr[6]
        }
        console.log(sum); // 210


  // 需求:
        let score = [97,65,43,99,60,58,36,72,85,77]
        let max =0;
        let min =100;
        for(var j=0;j<score.length;j++){
            if(score[j]>max){
                max=score[j]
            }
            if(score[j]<min){
                min =score[j]

            }
        }
        console.log(max);
        console.log(min);

7.新增数组元素

 // push在数组后添加元素
        let arr3 = [1,2,3,4]
        arr3.push(5,6)
        console.log(arr3); //[1,2,3,4,5,6]

        // unshift在数组前添加元素
        arr3.unshift(-2,-1,0)
        console.log(arr3); //[-2,-1,0,1,2,3,4,5,6]

        // 需求:把数组中大于10的元素筛选出来
        var arr4 =[4,5,8,9,11,30,39,20,19]
        var arr5 = []
        for(let i=0;i<arr4.length;i++){
            console.log(arr4[i]);
            if(arr4[i]>10){
              arr5.push(arr4[i])
            } 
        }
        console.log(arr5);
          // 需求:数组去0,形成一个新数组
          var arr6 = []
        for(let i=0;i<arr6.length;i++){
            if(arr4[i]!=0){
                arr6.push(arr4[i])
            }
        }
        console.log(arr6);

        // 需求: 将数组['一','二','三','四','五']反转
        // 反转后的数组为[]
        var arr7=[1,2,3,4,5]
        var arr8 = []
        // for(let i=0;i<arr7.length;i++){
        //    arr8.unshift(arr7[i])
        // }
        // console.log(arr8);

          for(let i=0;i<arr7.length;i++){
            for (let b=4;b>=0;b--){
                arr8.push(arr7[b])
            }
           
        }
            console.log(arr8);

5.3  二维数组

 // 二维数组指的是数组元素的值是一个一维数组
        var arr = [80,100,75]
        var arr1 = [
        [80,100,75],
        [50,60,70],
        [30,44,56],
        ]

        // 访问二维数组
        console.log(arr1[0]); // [80,100,75]
        console.log(arr1[0][0]); //80

        // 需求:遍历二维数组arr1
        // 
        for(let i =0;i<arr1.length;i++){
            for(let j=0;j<arr1[i].length;j++){
                console.log(arr1[i][j]);
            }
        }

        // 二维数组倒置
        var a = [
        ['a','b','c',],
        ['d','e','f',],
        ['h','i','j',],
        ['l','m','n',],
        ]
        var b = [];
        for(var i =0;i<a[0].length;i++){
            // 根据原数组的行,设置新数组的列
            b[i]=[];
            // 遍历原数组的列
            for(var j=0;j<a.length;j++){
                b[i][j]=a[j][i]
                // j是原数组的列 i是原数组的行
                // 颠倒位置
            }
        }
        
        console.log(b);

        // 需求: 计算出每一位同学的总成绩
        var stu = [
            [88,90,60,89],
            [58,45,78,80],
            [48,68,96,54],
        ]
        var sum;
        // 遍历行
        for(var i=0;i<stu.length;i++){
            console.log(i); // 0,1,2
            sum =0; //会得到3个sum值
            // 遍历列
            for(var j=0;j<stu[0].length;j++){
                console.log(stu[i][j]);
                sum+=stu[i][j]
            }
            console.log('第'+(i+1)+'为学生的总成绩是'+sum);
        }

  • 23
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值