Javascript 基础操作

Js基础使用

【输出语句】

alert("输入警告标语")

 该代码用于在浏览器中弹出警告

 console.log("输入想在控制台输出的信息")

  该代码用于在控制台输出信息

  document.write("输入在网页页面所需信息")

   该代码用于在网页上输出内容

 [输入语句]

用于需要在网页中弹出一个输入框时

   

prompt("请输入需要输入的内容")

  在网页中弹出确认框

confirm("输入需要输入的信息")

      ✳小节案例    


<script>
prompt("输入你的年龄")
confirm("你果真满了二十四岁吗")
alert("未满二十四岁禁止入内")
document.write("404 错误...")
  console.log("Not Found")
     </script>

JS代码引入方式

<-- 行内式 -->

    <-- onclick点击事件 -->

 <button onclick="">请点我</button>

在引号中加入 window.alert('')标签可以在点击后弹出内容

✳ eg.

<button onclick="window.alert('输入想要显示的内容')">请点我</button>

<-- 嵌入式 -->

<script>window.alert("内部样式")</script>

   嵌入式通常指的是将JavaScript代码直接嵌入到HTML文件中

<-- 链入式  -->

    适用于将外部代码链入html中

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

 JS基本语法

1.变量

   [先声明后赋值]

        

        1--声明变量(我们声明变量时应使用驼峰取名法,见名知意)
        var boy;
        var girl;

        console.log(boy);
        console.log(girl);

      如果控制台显示undefined则是表示该变量时未定义的

        2--为变量赋值

     

        boy="joker";
        girl="lily";


        console.log(boy);
        console.log(girl);

        [声明的同时赋值]
        var myAge=16;

        var myHeight=185;


✳小节案例

        var name= prompt('请输入你的名字')

        console.log(name)

        alert("欢迎"+name+'来到JavaScript世界')

        document.write('希望'+name+'成为Javascript高手')

       2.let声明变量

   知识科普

       let是Es6新引入的关键字,用来替代var关键字

       (Es6指2015年推出的ECMAScript语法)

 使用var声明变量,可以多次赋值,但是结果只与最后一个赋值有关。

        var boyFriend="蔡徐坤"
        var boyFriend="马嘉祺"
        var boyFriend="黄明浩"
        console.log(boyFriend)

 let不允许在一个代码块里有变量和他取一样的名字,但是允许修改同一个变量值。

  

         let girlFriend="陈立农"
         girlFriend="宋亚轩"
         girlFriend="林彦俊"
         console.log(girlFriend)

一个花括号{}就是一个代码块

{ let girlFriend="糖果超甜"}

3.const声明变量

在上一节可知let和var声明的变量可以改变

const声明变量不能改变,即常量

要记住书写的方式

 正确写法       

        const a=3.14
        console.log(a);

错误写法

         const a=3.1415926535
         a=3.15
         console.log(a);
const b;

这个写法也是错误的

const必须在声明的时候就赋值

2.数据类型

   1.数据类型分类

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

    复杂数据类型在堆内存中,但是地址在栈内存

   2.基本数据类型

        [Boolean-布尔型]
        let flag1=true;
        let flag2=false;

得出来的结果只有“true”和“false”

只有以上书写方式是正确的

        [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,这个也属于数字类型,意思是非数字的

 isNAN判断一个是否是数字

是则false 不是则true

[string-字符串]
        let demo1="字符串"
        let demo2=`字符串`
        let demo3='字符串'
        let demo4="老师说今天晚上不上课"
        console.log("111\'222");

有多种方法可以定义字符串

 [undefined-未定义的]

        表示声明变量未定义

        let grade;
        console.log(grade);
  [null-空]
        var a=null;
        console.log(a);

3.数据类型检测

前面提到的isNaN 检测是否是一个非数字

typeof() 数据检测,用于检测数据的类型

在需要识别的数据前加上typeo再将需要识别的数据用括号括起来

eg

console.log(typeof("123"));

这个识别出来的结果是字符串类型

其中有一个特殊的是null类型

console.log(typeof(null));

这个得出类的是 object

boolean类型true,会在运算中转化为1

boolean类型false,会在运算中转化为0

演示:


        console.log(2-true);//1
        console.log(typeof(2-true));//number

加号在这里有点特殊,在与字符串在一起时做拼接使用

        console.log(2+"true");//2true
        console.log(typeof(2+"true"));//string

4.数据类型转换

将数据类型转化为布尔类型

        Boolean()  

       字符串和数字都会转化为true

       空字符串转化为false

       打一个空格是true

       数字类型转化为false

       undefined转化为false

        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(Infinity));  //false
        console.log(Boolean(undefined)); //false
        console.log(Boolean(null));      //false

 将数据转化为字符串类型

使用String()或者toString()进行转化


        let num2=String(num);
        console.log(num2);
将数据转化为数字类型

undefined转化为数据类型为NaN

Number()用于将数据转化为数字类型

        console.log(Number(123));//数字类型123
        console.log(Number("123"));//字符串转化为数字类型123
        console.log(Number(""));//转化为0
        console.log(Number(" "));//转化为0   什么都没有的转化为0
        console.log(Number(null));//0
        console.log(Number(undefined));//undefined转化为数据类型为NaN
        console.log(Number(false));//0
        console.log(Number(true));//1
        console.log(Number("true"));//NaN
        console.log(Number("123."));//123.1
        console.log(Number("123.a"));//NaN

3.运算符

1.算数运算符

先定义两个变量


        let a=10;
        let b=20;

加法运算:
console.log(a+b);//30
减法运算:
        let c=b-a;
        console.log(c);//10
乘法运算:
console.log(c*b);//200
除法运算:

        b=b/a;
        console.log(b);//2
取模运算 取余数:

        console.log(26%5);//1
幂运算:

        console.log(2**10);//1024
        运算过程为//2*2*2*2*2*2*2*2*2*2
自增运算:

(加号在前在后的算法是不一样的)

eg:

        m=5;
        n=++m;
        console.log(m);//6
        console.log(n);//6
        m=5;
        n=m++;
        console.log(m);//6
        console.log(n);//5

        var x=1;y=2;
        console.log(++x);//2
        console.log(x);//2
        console.log(y++);//2
        console.log(y);//3
自减算法:

(与加法一样,减号的先后运算方式也不一样)

eg:


        q = 2;
        p=--q;
        console.log(q);//1
        console.log(p);//1

        q=2;
        p=q--;
        console.log(q);//1
        console.log(p);//2

        var d=10;s=10
        console.log(++d);//11
        console.log(d);//11
        console.log(d--);//11
        console.log(d);//10

2.字符串运算符和隐式转化

字符串运算:

  加号遇到字符串,做拼接使用。


        console.log(1+"1");//11
        console.log(1+"null");//1null
        console.log(null+"undefined");//nullundefined
隐式转换:

  当两个数据类型不同时,JS会按照既定的规则进行转换。


        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

3.赋值运算符

赋值:

        let a=10;
        let b = 20;
        let c = a + b ;
加等于/减等于赋值+-
        a += b;
        //a = a + b
        console.log(a);//30
        console.log(b);//20
        
        a -= b;
        //a = a - b;
        console.log(a);//10
        console.log(b);//20

其他几个运算符也和加减的赋值一样

        a *=b;//200
        console.log(a);
        
        a /=b;
        console.log(a);
       
        a %=b;
        console.log(a);
        
        a **=b;
        console.log(a);

4.比较运算符

   !=不等于

        console.log(4!=5);//ture
        console.log(4!=4);//false

得出的结果是boolean类型的

==等于
console.log(4=="4");//ture
===全等于

  

console.log(4==="4");//false

      在这里需要记清楚等号个数的作用

      一个等号是赋值,两个等号是等于,三个等号是全等于

      ==和!=在比较不同数据类型时,会将数据转化为相同数据类型,

      ===和!==不会进行数据类型转换。

5.文字运算符

        && 逻辑与运算符  一假则假

         || 逻辑或运算符  一真则真

         !  逻辑非运算符  真作假来假一真


        console.log(3>2&&2>1);//true
        console.log(3<2&&2>1);//false
        console.log(3<2&&2<1);//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);//false
        console.log(0||4<3);//false


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

6.三元运算符

条件表达式  ? 表达式1:表达式2

        如果条件表达式为true则返回条件1的执行结果

        如果条件表达式为false则返回条件2的执行结果

eg:

        var age = prompt("请输入你的年龄")
        var res = age >=18 ?"你已经是个优秀的成年人了":"小屁孩"
        document.write(res)

7.运算符优先级

小括号 > 一元运算符 >算数运算符 >  比较运算符 > 逻辑运算符 (逻辑与 > 逻辑或)  > 赋值运算符  > 逗号运算符

eg:


        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
 

4.流程控制

1.选择结构

 1 .if语句

结构为:

if (条件表达式){代码段}

        let age =prompt("请输入你的年纪")
        if (age>=18) {
             document.write("你可以进来")
2.if...else语句(双分支)

        结构为:

        if (条件表达式){代码段}lese{代码段2}

eg:

let age =prompt("请输入你的年纪")

         if (age >=18) {

             document.write("允许进入")

         } else {

             document.write("非法访问")

         }
3.3.if...else if...else语句(多分支)

结构为:

if (条件一) {

        /    document.write("条件表达式一的结果")

         } else if (条件二) {     

         } else {

             document.write("条件表达式二的结果")

        }

eg:



        let ach =prompt("请输入你的成绩")
         if (ach<20) {
            document.write("退学不要读了")
        } else if (ach<40&&ach>=20) {
            document.write("留级")
        }  else if (ach<60&&ach>=40) {
            document.write("成绩不合格,回去补考")
        } else if (ach<70&&ach>=60) {
            document.write("成绩合格")
        } else if (ach<80&&ach>=70) {
            document.write("成绩还行")
        }  else if (ach>=80&&ach<100) {
            document.write("成绩优秀")
        } else if(ach==100) {
            document.write("可以拿奖学金")
        }
          

数组

初识数组

        数组是一种复杂数据类型。
 
        用于讲一组集合在一起。
 
        通过一个变量就可以访问一组数据。
 
 
 
        数组之间通过逗号分隔
 
 
 
        数组中的"搜索/下标",是从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);        

创建数组

      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",'lily','bob');
 
        console.log(arr);
 
 
 
      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]
 
 
 
         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 数组名[index] 删除数组中的某个元素值
 
        delete arr[1];
 
        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<arr1.length;i++) {
 
           sum += arr1[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   sum+40 = 40+60=100
 
           arr[4] 50   sum+50 = 50+100=150
 
           arr[5] 60   sum+60 = 60+150=210
 
}
 
        console.log(sum);//210
 需求:
 
        let score =[97,65,43,90,60,58,36,72,85,77]
 
        找到班上的最高分和最低分
 
        var max = min = score[0];
 
        for(var i= 1;i< score.length; i++){
 
            if(score[i] > max){
 
                max = score[i]
 
            }
 
            if(score[i] < min){
 
                min = score[i]
 
            }
 
        }
 
        console.log(max);//99
 
        console.log(min); //36
     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 =[0,-5,19,50,2,0,7,10,11,-6,8,2]
 
        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< arr4.length; i++){
 
        console.log(arr4[i]);
 
        if(arr4[i]!=0){
 
            arr6.push(arr4[i])
 
    }
 
}
 
        console.log(arr6);
 
 
 
 
        需求:将数组['一','二','三','四','五']反转,
 
       反转后的数组为['五','四','三','二','一']
 
 var arr7 =['一','二','三','四','五'];
 
       var arr8 =[];
 
       for(var i =0; i<arr7.length;i++){
 
        arr8[arr7.length-1-i] =arr7[i]
 
       }
 
       console.log(arr8);

二维数组

二维数组指的是数组元素的值是一个一维数组
 
        var arr =[80,100,75]
 
        var arr1 =[
 
            [80,100,75],
 
            [90,67,66],
 
            [99,87,85],
 
        ]
 
 
 
        访问二维数组
 
        console.log(arr1[0]);//[80,100,75]
 
        console.log(arr1[0][0]);//[80]
 
 
 
        遍历二维数组arr1
 
        for (var i =0; i<arr1.length;i++) {
 
            for(var j =0; j<arr[i].length;j++){
 
                console.log(arr[i][j]);
 
            }
 
        }
 
         二维数组倒置
 
        var arr =[
 
            ['a','b','c'],
 
            ['d','e','f'],
 
            ['g','h','i'],
 
            ['j','k','l']
 
        ];
 
 
 
        var res =[
 
            [],
 
            [],
 
            []
 
        ];
 
       遍历行
 
        for(var i =0; i<arr.length; i++){
 
           遍历列
 
            for(var j =0; j<arr[i].length;j++){
 
                res[j][i] =arr[i][j]
 
 
 
            }
 
 
 
        }
 
        console.log(res);
需求:计算出每一位同学的总成绩
 
        var stu =[
 
            [88,70,60,60],
 
            [66,46,60,80],
 
            [90,70,88,93],
 
           
 
        ];
 
        var sum =0;
 
        for(var i =0; i<stu.length; i++){
 
            var sum =0;
 
            for(var j =0; j<stu[i].length;j++){
 
                sum +=  stu[i][j]
 
 
 
            }
 
            console.log('第'+(i+1)+'位的学生的总成绩是'+sum);
 
 
 
        }

函数

初识函数

[函数定义]

        函数用于封装完成一段特定功能的代码。

        相当于将一条或多条语句组成的代码块包裹起来。

        用户在使用时只需要关心参数和返回值,就能完成特定的功能,而不用了解具体的现实

      [内置函数]
        console.log(isNaN("number"));//true
        console.log(parseInt('15.99'));//15

 [自定义函数]

        提高代码的复用性,降低程序维护的难度。

        [函数格式]

        function name(params) {    

        }

        function指这是一个函数语句

        name是函数名

        params是函数参数

        {}内放函数的具体功能

        [无参函数]
        封装函数
        function demo() {
            console.log('我是一个函数');
            
        }
        使用函数
        demo()
        demo()
        [有参函数]
        function sum (a,b){
            console.log(a+b);
        }
        sum(1,2)
        sum(88888,99999)
 需求:定义一个函数total,调用函数时传入price价格、num数量 ,
      就可以计算并在页面上打印函数的总价all。
 
        function total (price,num){
            var all =price *num;
            document.write("商品的总价为"+all+"元")
        }
        total(9999,12)
        total(6666,3)

[函数的返回值]

        函数的返回值是指函数在调用后获得的数据

        在定义函数时,可以为函数指定一个返回值,函数的返回值可以是任意类型的数据

        在JS中使用return语句得到返回值并退出函数

        {return 表达式}

 function total01 (price,num){
             all =price *num;
             return all
        }
        console.log(total01(9999,12));
需求:定义一个函数maxNum,求任意两数的最大值。
        function maxNum(a,b){
            if (a>b) {
                console.log("最大值"+a);
                
            }else{
                console.log("最大值"+b); 
            }
        }
        maxNum(5,9)
    需求:定义一个函数getSum,可求出任意数组中每个项的和
        function getSum(arr){
            let sum = 0;
            for(let i = 0;i<arr.length;i++){
                sum += arr[i]
            }
            //返回值 
            return sum
        }
        console.log(getSum([1,2,3,4,5]));
        console.log(getSum([5,6,7,8,9,10,11,12,13]));

    需求:判断数组是不是所有元素都是正数,是则返回true,不是则返回false
        function number (arr1){
          for(let i = 0;i<arr1.length;i++){
          if(arr1[i]<0){
            res = false;
            break
          }
        }
        return res;
        }
      console.log(number([1,2,3,4,-1,-2]));
    需求:找出数组中元素为10的下标,有则返回该下标,没有则返回-1
      function find(arr) {
         for (let i = 0; i < arr.length; i++) {
             if (arr[i] == 10) {
                 return i;
                }
            }
             return -1;
             }
            var arr = [1,2,3,4,5];
            var arr1=[6,7,8,9,10];
            console.log(find(arr));
            console.log(find(arr1));
 
 
            let arr=[1,2,3,4,5]//-1
            let arr1 =[6,7,8,9,10]
            function getIndex(arr){
     声明变量存储下标
        let index=-1
            for(var i=0;i <arr.length; i++){ console.log(arr[i]);
        if(arr[i]=== 10){index = i;
        break
        }
    }
}
        return index
        console.log(getIndex(arr));//-1
         var index= getIndex(arr1)
        console.log(index);//4
    [获取函数调用时传递所有参数]
        function num (a,b){
            console.log(a,b);
        }
        num(1,2) //1,2
        num(1,2,3,4,5) //1,2
        num(1)  //1  undefined
 
 
 
 
 
         ...扩展运算符
          function num1(...nums) {
             console.log(nums);
         }
         num1(1,2,3,4,5)  //[1, 2, 3, 4, 5]
         num1(1,undefined,3) //[1, undefined, 3]

         arguments对象
         在开发时,如果不确定形参的个数,可以不设置形参
         在函数体中直接通过arguments对象获取函数调用时传递的实参
         function num2() {
             console.log(arguments);
             console.log(arguments.length);
         }
             num2(1,2,3,4,5)
             num2(1,2,3)
 
 
             需求:定义一个sum函数
             1.通过arguments对象来获取所有实参数
             2.并获取具体的实参值
             3.对所有实参进行求和
             function sun(){
                console.log(arguments);
                var sum =0
                for(var i =0; i<arguments.length;i++){
                    console.log(arguments[i]);
                    sum  +=arguments[i]
                }
                console.log(sum);
             }
                sum(1,2,3)
                sum(1,2,3,4,5)

函数内外变量的作用域

        [变量]
 
        全局变量:在函数体外声明的变量或者在函数体内省略var关键字声明的变量
        var a =10
        function demo (){
            console.log(a);//a为全局变量,在函数体内可以被访问
        }
        demo()
 
        console.log(a);//a为全局变量,在函数体外也可以被访问
 
        局部变量:在函数体内利用var关键字声明的变量
 
        function demo1 (){
            var b =10
            console.log(b); 函数内部定义的局部变量b,可以在函数体内访问
 
            c =20; c是省略var关键字声明的变量,为全局变量
            console.log(c);全局变量c,可以在函数内部被访问
 
            
        }
        demo1() 10
        console.log(b); b is notdefined 不可以在函数外访问局部变量b
        console.log(c); 可以在函数外访问到全局变量c
 
        
        块级变量:在ES6标准中,新增的let关键字声明的变量为块级变量
        一个花括号{}为一个块级
        
        if(true){
             let sex = '男' let声明变量sex为块级变量
             console.log(sex); 块级变量sex可以在{}内部被访问
        }
          // console.log(sex); 块级变量sex不可在{}外被访问
         
          for(let i =0 ; i<5; i++){
            console.log("循环内部"+i);
          }
          console.log("循环外部+i");i is not defined
 
        【js三种作用域】
        全局作用域:被全局变量所拥有:在{}外声明的变量
        局部作用域:被局部变量所拥有:在函数内定义的变量
        块级作用域:被块级变量所拥有:在分支语句或者循环大括号中定义的变量
 
 
        可以访问到var声明的全局变量demo,
        但是demo目前没有赋值,为undefined
        console.log(demo);//undefined 
 
 
       let声明的全局变量//不允许在变量初始化前被访问console.log(test);
       Cannot access 'test' before initializatio
 
 
       var demo = 7
      let test = 10  全局变量
      function fun(){
        console.log(demo);7
        console.log(test);10
}
    fun()
      console.log(demo);7
      console.log(test);10
      
 
      [变量提升]
      console.log(a);undefined
      let  a =20;
 
 
      通过var声明的变量,在声明并赋值语句之前就可以访问
 
      console.log(d);//undefined
      var d  =20;
 
      因为变量提升,所以80-81的代码执行效果与85-87一样
 
      var d;
      console.log(d);
      var d =20;

函数进阶

       [函数表达式]
 
        封装一个sum函数,在函数内可以求得变量num1和变量num2的和
        
        var fn = function sum (num1,num2){
            在函数内部封装了一个打印语句
            调用函数,就会执行打印语句
            console.log(num1+num2);
        }
        sum(10,20) 30
        fn(10,20)
 
        var fn1 = function sum1(num1,num2){
            在函数内部求了一个和
            并将求得的和返回去
            让函数外部可以拿到
            return num1+num2;
            
        }
        console.log(sum1(10,20)); 30
        console.log(fn1(10,20)); 30
 
        匿名函数
        var fn3 = function(num1,num2){
            console.log(num1+num2);
        }
        fn3(10,20)
 
        var fn4 = function sum1(num1,num2){
            return num1+num2;
            
        }
        console.log(fn4(10,20)); 30
 
        
 
        
        [箭头函数]
        删除function关键字
        在参数和函数体中间放上"=>"
        
         var fn5 = (num1,num2) => {
            console.log(num1+num2);
        }
        fn5(10,20)
 
        当函数体只有一句话时,可以省略大括号
 
        var fn6 = (num1,num2) => console.log(num1+num2);
        fn6(10,20)
 
        当函数体只有一个代码时,并且函数的执行结果就是函数的返回值
        可以省略函数的大括号和return关键字
        var fn7 = (num1,num2) => num1+num2;
        console.log(fn1(10,20)); 30
 
        当函数只有1个时,可以省略函数外部的小括号
        var fn8 = num1 =>num1+num1
        console.log(fn8(10)); 20

回调函数

        函数fn作为参数传递给参数cal
        然后在函数cal中调用函数fn
        此时,fn就是回调函数
        function cal (num1,num2,fn) {
             return fn(num1,num2)
        }
        console.log(cal(10,20,function(a,b){
            return a+b
        })); 30
 
        console.log(cal(10,20,function(a,b){
            return a*b
        })); 200
 
        //练习:调用cal函数,完成num1和num2的取模运算
        console.log(cal(20,10,function(a,b){
            return a%b
        })); 0

定时器函数

      setInterval()
        Interval:间隔,间隙
        "时间间隔"一到,代码就会执行一次。
 
        setInterval(function(){
            console.log("该上课了");
        },5000)
 
        setTimeout()
        用来指某个函数或某段代码在多少毫秒以后执行
    
        setTimeout(function,time)
        setTimeout(function(){
            console.log("要抢票了");
        },3000)
 
        定时器函数属于异步代码
        setTimeout指定的代码,必须等同步代码执行完成后执行
 
        console.log(1);
        setTimeout(function(){
            console.log(2);
        },0)
        console.log(3);  132
 
        console.log("A");
        setTimeout(function(){
            console.log("B");
        },20)
        console.log("C");
        setTimeout(function(){
            console.log("D");
        },0) ACDB

函数嵌套与作用域链

      [函数嵌套]
 
       var i =10;
 
       function fn1 (){
 
        var i =20;
 
        function fn2 (){
 
            function fn3 (){
 
                console.log(i);
            }
            fn3()
        }
          fn2()       
       }
         fn1()

闭包函数

         闭包 (close) :闭包是一种代码形式,内部函数访问外部函数的局部变量。
         举例: js函数A中有一个函数B,函数B访问了函数A里面定义的局部变量,此时就产生了闭包。
         变量所在的函数就是闭包函数,在这里,A就是闭包函数。
 
        外部函数
 
        function outer (){
 
        外部函数定义的局部变量
        let n =10
 
        内部函数
        function inner(){
            内部函数要访问外部函数定义的局部变量
            console.log(n);
        }
          inner()
        }
          outer()
          闭包函数的作用:解决变量污染问题,让变量被函数保护起来。
 
          let count = 0;
          setInterval(function(){
            console.log(count++);
          },1000)
           在这段代码中,count是一个很常用的变量名。
           为了避免和其他位置的代码冲突,可以使用一个函数将上面的代码包裹起来
 
          function fn () {
            let count = 0;
            setInterval(function(){
                console.log(count++);
            },1000);
          }
          内部函数setIntrval访问外部函数fn定义的局部变量count
          function fn () {
            let count = 0;
            function add(){
                console.log(count++);
            }
            setInterval(add,count)
          }

网页计算器

       <!-- 以下是HTML部分 -->
    <p>整数1: <input type="text" id="num1"></p>
    <p>整数2: <input type="text" id="num2"></p>
    <p>
        >
        <!-- onclick按钮点击事件 -->
        <input type="button" value="相加" onclick="cal(add)">
        <input type="button" value="相减" onclick="cal(sub)">
        <input type="button" value="相乘" onclick="cal(mul)">
        <input type="button" value="相除" onclick="cal(div)">
    </p>
    <p>结果: <input type="text" id="result"></p>
 
        以下是JS部分
 
        function add(num1,num2){
            return num1+num2
        }
        function sub(num1,num2){
            return num1-num2
        }
        function mul(num1,num2){
            return num1*num2
        }
        function div(num1,num2){
            if(num2===0){
                alert("除数不能为0")
            return ""
        }
        return num1/num2
    }
 
    function cal(){
        通过ID"num1"得到HTML中名字叫"num1"的输入框的值
 
        var num1 =document.getElementById("num1").value
        var num2 =document.getElementById("num2").value
        var result = document.getElementById("result")
        result.value = func(num1,num2)
    }
 

递归函数

        递归函数是一个函数间接或直接的调用自身
 
        function func (){
            console.log(1);
            func()
        }
 
        需求:设置一函数getSum()
        如果传入进去的是n
        return sum =n + (n-1) + (n-2) + .. + 1
 
 
        例如:
        n = 5
        sum =5+4+3+2+1=15
        
        循环写法1
        function getSum1(n){
            var sum =0
            for(var i=0 ; i<=n;i++){
                sum +=i
 
            }
            return sum
        }
        console.log(getSum2(5)); 15
 
          循环写法2
          function getSum(n){
            var sum =0
            for(var n ; n>=0;n--){
                sum += n
 
            }
            return sum
        }
        console.log(getSum(5)); 15
         递归写法
        function getSum3(n){
        当n=1时;
        if(n==1){
            return 1;
        }
        当前数组+比自己小1的数字
        return n +getSum3(n-1)
    }
    console.log(getSum3(5));//15
    需求:设置一个函数,求阶乘(循环写法)//传入一个n,返回n*(n-1)*(n-2)*...*1
    需求:设置一个函数,求阶乘(递归写法)//传入一个n,返回n*(n-1)*(n-2)*...*1
 
    求斐波那契数列(循环写法)
    求斐波那契数列(递归写法)
 
    循环写法一:
    function fn(n){
             var mulSum =1
             for(var i=1 ; i<=n;i++){
                 mulSum *=i
 
           }
            return mulSum
         }
         console.log(fn(4));//24
 
    循环写法二:
    function fn2(n){
             var mulSum =1
             for(var n ; n>0;n--){
                 mulSum *= n
 
           }
            return mulSum
         }
         console.log(fn2(4));//24
    递归写法:
    function fn3(n){
        设置终点
        if(n===1){
            return 1;
        }
        return n *fn3(n-1)
    }
    console.log(fn3(4));//24
        斐波那契数列(每一项等于前两项之和)
        1,1,2,3,5,8,13,21,34,55,89
 
        斐波那契数列(循环写法):
        function getValue(n){
            var arr =[1,1]
            for(var i=2;i<n;i++){
              某一个等于前两个数之和
              比如下标i=6(下标为6)的数是8+5(下标为5)
              i是下标,arr[i]对应的是数组值
            arr[i]=arr[i-1]+arr[i-2]
        }
        console.log(arr);
            return arr[arr.length-1]
        
    }
    console.log(getValue(10));
   斐波那契数列(递归写法):
    function getValue2(n){
        设置终点
        if(n===1 || n===2){
            return 1
        }
        return getValue2(n-1)+getValue2(n-2)
 
    }
    console.log(getValue2(10)); 55

对象

介绍对象

        1.对象是什么:对象是一种复杂数据类型
        (复杂数据类型的内容储存在堆内存中,地址存储在栈内存中)
        2.对象作用: 以键值对的形式存储多个数据
 
        需求: 存储一个人的信息 (姓名 年龄 性别)
 
 
        1.使用简单数据类型
 
        let name ="张三"
        let age =30;
        let sex ="男"
        (好处: 阅读性高  弊端:冗余)
 
        2.使用数组
             var people=["张三",39,"男"]
        好处:(一个变量存储多个数据  弊端:阅读性不高)
         3.对象
         let obj={
            键: 值
            name:"张三",
            age:30,
            sex:'男',
            gfs:["小花","小美","小爱"],
            sayHi:function(){
 
            }
            
     }
 
      3.1 对象查询
 
      console.log(obj);//(name:"张三",age:30,sex:'男')
      console.log(obj.name);//"张三"
      console.log(obj.age);//30
      console.log(obj.sex);//'男'
      console.log(obj.gfs);//["小花","小美","小爱"]
      console.log(obj.sayHi);
      console.log(obj.sayHi());
 
      3.2 对象新增
 
      obj.bf="李四"
      console.log(obj);
 
      3.3 对象修改
 
      obj.bf="王五"
      console.log(obj);
 
       对于对象的属性,如果有这个属性,是修改属性值;如果没有这个属性,是新增。
 
        3.4 对象删除
 
        delete obj.age
        console.log(obj);
      3.5 对象遍历
      遍历数组: for (let i=0; i<arr.lenght; i++){}
      遍历对象: for-in循环: for (let key in 对象名){对象名[key]}
      let score ={
        math:99,
        history:80,
        geology:70,
        english:60
     }
 
     for(let key in  score){
        console.log(key); 打印属性名
        console.log(score[key]); 打印属性值
     }

Math对象

        1.内置对象:由JS作者提前编写好的对象,里面储存了一些属性方法,直接使用即可。
        2. Math数学对象,Date日期对象
 
        const pi =3.14
        const r =5
        const C =2*pi*r
        console.log(C);
 
        a.圆周率:Math.PI
        console.log(Math.PI);
        const c= 2*Math.PI*r
        console.log(c);
 
 
        b.绝对值:Math.abs()
        console.log(Math.abs(-3.5));
 
        c.找最大/最小值:Math.max()/Math.min()
        console.log(Math.max(1,9,5,6,3,4,6,2));//9
        console.log(Math.min(1,9,5,6,3,4,6,2));//1
 
        d.幂运算:Math.pow(x,y)求x的y次方
        console.log(Math.pow(2,10));//1024
        e.四舍五入:Math.round()
        console.log(Math.round(3.5));//4
        console.log(Math.round(3.2));//3
        console.log(Math.round(-3.5));//-3
        console.log(Math.round(-3.6));//-4
 
        f.向上取整:Math.ceil()
        console.log(Math.ceil(3.1));//4
        console.log(Math.ceil(-3.1));//-3
 
        g.向下取整:Math.floor()
        console.log(Math.floor(-1.8));//-2
 
        h.生成一个0-1之间的随机小数:Math.random()
        console.log(Math.random());
 
        生成一个0-100之间的随机整数:Math.
        console.log(Math.round(100*Math.random()));

Math对象案例

            当点击btn按钮时,会触发function函数
            btn.onclick = function(){
            生成0-1之间的随机数
            var rand=Math.random()
            设置抽奖范围/人数
            var total =100;
            设置抽奖等级
            var level =0;
            设置抽奖结果
            var number =0;
 
            抽奖过程
            将number转化为一个0-100之间的整数
            number = Math.round(Math.random()*100)
 
            抽奖结果
            if(number==1)
            level =1;
            else if(number==2 || number==3)
            level =2;
            else if(number>3 && number<8)
            level =3
            if(level){
                alert("恭喜声 你获得了"+level+"等奖")
            } alert("谢谢参与!")
        
    }

Date对象

        时间戳:从1970年1月1日零时零分零秒到现在的毫秒数
        以下三种写法都会得到时间戳
        console.log(Date.now());
        console.log(+new Date);
        console.log(new Date().getTime());
 
        获取年份
        console.log(new Date().getUTCFullYear());
        获取月份
        console.log(new Date().getMonth());  //范围是0~11
        获取日期
        console.log(new Date().getDate());  //范围是1~31
        获取星期
        console.log(new Date().getDay());   //范围是0~6 星期天是0
        获取小时
        console.log(new Date().getHours());
        获取分钟
        console.log(new Date().getMinutes());
        获取内置Data对象
        var date =new Date();
 
        设置年份
        date.setFullYear(2005)
        date.setMonth(1)
        date.setDate(21)
 
        获取年份
        var year=date.getUTCFullYear()
        var month=date.getMonth()
        var date=date.getDate()
        打印年份
        console.log(year);
        console.log(month);
        console.log(date);
        document.write(year+"年"+month+"月"+date+"日"+"是我出生的日子")
             参数time是自己的出生时间
             function count(time){
             得到当前时间时间戳
            var nowTime = new Date()
            得到过生日时间时间戳
            var overTime = new Date(time)
            将即将过生日的时间剪去现在的时间,得到一个生日倒计时
            %1000 是将亳秒数转化为秒数
            var times = (overTime-nowTime)/1000
           
            console.log(times);
            一天=24小数=60分钟=60秒
            var day = parseInt(times / 60 / 60 / 24)//天数
            console.log(day);//243
            小时//%用于取余数,就是计算完之间70天之后,剩下的小时数
            var hours = parseInt(times / 60 / 60 % 24)//小时
            console.log(hours);//14
            分钟
            var mins = parseInt(times / 60 %60)//分钟
            console.log(mins);//17
            秒数
            var sec = parseInt(times % 60 )//秒数
            console.log(sec);//54
        
            alert("距离生日还有"+day+"天"+hours+"小时"+mins+"分钟"+sec+"秒")
        }

Array对象

         var course = ["web","java"]
 
         push()在数组末尾添加一个元素
         course.push("javaScript")
         console.log(course); //["web","java","JavaScript"]
 
         unshift() 在数组开头添加一个元素
         course.unshift("计算机基础")
         console.log(course); //['计算机基础', 'web', 'java', 'javaScript']
        
         pop()删除数组中最后一个元素
         course.pop()
         console.log(course); //['计算机基础', 'web', 'java']
 
         shift()删除数组第一个元素
         course.shift()
         console.log(course);//['web','java']
 
         splice (start,deleteCount)
         var arr =[1,2,3,4,5,6,7]
         arr.splice(3,2) //从下标为3的数(4)开始, 删掉后面2个数字
         console.log(arr); //[1,2,3,6,7]
 
         splice (start,deleteCount,item1,item2,item3)
         arr.splice(4,0,999,888,777) //从下标为4的数字(6)开始往后面添加元素
         console.log(arr); //[1, 2, 3, 6, 999, 888, 777, 7]
 
         reverse():颠倒数组中元素的索引
         var arr1 =[1,2,3,4,5,6,7]
         arr1.reverse()
         console.log(arr1); //[7, 6, 5, 4, 3, 2, 1]
         sort
         升序排序
         var arr2 =[19,45,20,0,18,73]
         arr2.sort(function(a,b){
            return a-b
         })
         console.log(arr2); //[0, 18, 19, 20, 45, 73]
 
          降序排序
          var arr3 =[19,45,20,0,18,73]
         arr3.sort(function(a,b){
            return b-a
         })
         console.log(arr3); // [73, 45, 20, 19, 18, 0]

String对象

         创建字符串对象
         var str=new String("apple")
         console.log(str); // ('apple')
 
         访问字符串长度
         console.log(str.length); //5
         数据类型检测
         console.log(typeof(str)); //object
         var str1="banana"
         console.log(typeof(str1)); //string
 
         根据字符串返回索引
         indexOf() 返回字符串中首次出现的索引,没有则返回-1
         lastIndexOf(element) 返回字符串中最后一次出现的索引,没有则返回-1
         var str="helloworld"
         console.log(str.indexOf("o")); //4
         console.log(str.lastIndexOf("o")); //6
 
         根据索引返回字符串
         chatAt
         console.log(str.charAt(7)); //'r'
        字符串截取
        slice (start)
        console.log(str.slice(5)); //"word"
        slice(start,end) 从start的下标截取到end的下标
       console.log(str.slice(1,4));  //"ell"
       console.log(str); //helloword  截取不会改变原数组
 
       字符串连接
       concat()
         var str1="hello"
         var str2=",world"
         console.log(str.concat(str2)); //helloword,word
          大小写转换
          toUpperCase 转化为大写
          tolowerCase 转化为小写
         console.log(str1.toLocaleUpperCase()); //HELLO
         console.log("HELLO".toLowerCase()); //hello
 
         替换
         replace(str1,str2)
         console.log(str); //helloworld
         console.log(str.replace("world","JS")); //helloJS
 
         字符串分隔(将字符串转化为数组)
         split(分隔符)
        console.log(str.split("")); //['h','e','l','l','o','w','o','r','l','d']
        console.log(str.split());//['helloworld']
        console.log(str.split("o"));//['hell','w','rld']

  • 35
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值