【JS】ECMA标准的脚本语言规范

关于js

1.什么是js(JavaScript):轻量级的脚本语言
        
2.能做什么:交互,行为
        
3.js包含:
          a.核心(ECMAScript)
          b.Dom(Document Object Model)文档对象模型
          c.Bom(Browser)浏览器对象模型


	(一)js的引入方式
        1.直接在标签里写js代码
            <!--<div οnclick="js代码"></div>-->
            <div onclick="alert('我被点了')">点我</div> <!--所有on开头的属性 事件名称-->

        2.a标签引入(需要在href里面写js代码)
            <a href="javascript:alert('hahahaah')">a标签点击</a>

        3.内嵌(body的最后一个子元素)

        4.外联
            <script src="demo1.js"></script>

    (二)页面输出
        1.弹框输出,浏览器弹框
            alert("弹框内容")

        2.控制台输出
            console.log("内容")

        3.页面输出
            document.write(<br/><h1>页面输出的内容</h1>)

    (三) 变量

<script>
        //备注
        /*多行注释*/
</script>

变量

1.什么是变量
    容器,能随时改变得量
    
2.为什么用变量?
    1341156用一个容器把它装起来更方便

<script>
//3.如何定义容器(申明变量的方式)
        //关键词 var 变量名;
        var shuibei=""
        //关键词 let 变量名;   es6
        let a="";
        
</script>

    变量命名规范:
        1.命名必须以字母、下划线(_)、$开头
        2.变量名中不允许使用空格和其他标点符号,首字母不能是数字
        3.不能出现中文
        4.驼峰命名法 shuiBei  (css中一般这样写:shui-bie)
        5.不能使用关键词 myIf

    4.容器内可以装什么?
        任何东西都可以装,在程序中装的所有的东西称之为数据

数据

基本数据类型(重点):
        1.number:数值  1111111
        2.string:字符串  "111111" 打了引号的都是字符串
        3.boolean:布尔值  true/false
        4.null:空
        5.undefined:未定义(let shuibei;没装东西,未初始化)

引用数据类型(知道):
        1.object 对象
        2.array 数组
        3.function 函数

<script>
    //数字
    let myNum=123; //申明变量的同时为它赋值
    let myNum2;
    myNum2=333;

    //字符串
    let myStr="11111";
    myStr="hello";
    myStr="你好";
    console.log(myStr);

    //布尔值
    let myBoolean=true;
    //空
    let myNull=null;
    //未定义
    let myUnde=undefined;

    //检测数据类型 typeof(可以查看变量的数据类型)
    console.log(typeof myUnde)
    console.log(typeof myNull) //object
    console.log(typeof myBoolean)
    console.log(typeof myNum2)
    console.log(typeof myStr)

</script>

运算符

1.算数运算符:+  减-  乘*  除/  取余%

<script>
    //取余(取模)
    // console.log(10%3);  //1

    //乘法、除法
    // console.log(null*100);  //null转0
    // console.log(undefined*100)  //undefined转NaN(Not a Number不是一个数字)

    //减法
    // console.log(100-100);
    // console.log(100-"100");  //会将字符串转成数字再进行运算(隐式转换)
    // console.log(true-"100");  //true转1,false转0

    //加法
    // console.log("100"+100); //字符串:100100
    // console.log(100+45);    //数值:145
    // console.log(null+100);  //数值:100
    // console.log(null+"100");  //字符串:null100 只要看到""都是做字符串拼接
</script>


    2.比较运算符:<    >   <=    >=    !=    ==    !==    ===

    ==和===的区别:==只比较值,===既要比较值又要比较数据类型
    
<script>
    // console.log(100=="100") //true
    // console.log(100==="100") //false
    // console.log(100!=="100") //true
</script>


    3.逻辑运算符:并且&&   或者||   取反(非)!
<script>
    // console.log(!true);  //false
    // console.log(!(5>3));  //false
    // console.log(!(5>3&&5<6));  //false
    // console.log(5<3&&5<6);  //false  &&运算符两边的表达式都成立才是true
    // console.log(5<3||5<6||6>1)  //true   ||运算符两边有一边满足表达式则是true
</script>


    4.一元运算符(有1个操作数):++   --
<script>
    //++在后(先赋值后运算)
    // let b=2;
    // console.log(b++); //输出2  b变成3
    // console.log(b--); //输出3  b变成2
    //
    // let c=b++; //输出2  b变成3
    // console.log(c); //2
    // console.log(b); //3

    //++在前(先运算后赋值)
    // let d=3;
    // let n=++d;
    // console.log(n); //4
</script>

    5.二元运算符(有2个操作数):
        a+b
        a/b
        之类的


    6.三元运算符(3个操作数):
<script>
    // let sex="男";
    // sex==="女"?alert("可爱"):alert("脸红")
</script>


    7.赋值运算符:=   +=   -=   *=   /=
<script>
    let a=13;
    a+=2; //a=a+2  15
    console.log(a)

    a-=1; //a=a-1  14
    console.log(a)
</script>

数据类型的转换

    undefined
    number
    string
    null
    boolean


    1.转数值
<script>

        // (1)parseInt(第一个值开始转换,如果第一个值不能转换为数字则结果为NaN。如果可转则一个一个依次转为数字,直到不能转换为止,但是它只转换小数点之前的数字。)
        //     let a="a6.2哈哈a";
        //     let b="6.2哈哈a";
        //     console.log(parseInt(a));  //NaN
        //     console.log(parseInt(b));  //6

        // (2)parseFloat(别的都和parseInt一样,唯一区别就是可以转小数)
        //     let e="12.561adf";
        //     console.log(parseFloat(e)); //12.561

        // (3)Number(首字母大写,不是一个一个转,必须整体是一个数字才可以转,否则结果为NaN)
        //     let c="19";
        //     console.log(Number(c)); //19

        //判断是否NaN(   isNaN()   )
        //     let d="15a";
        //     console.log(isNaN(d)); //true

</script>

    2.转字符串
<script>
        //String
        //     let a=true;
        //     let b=5;
        //     console.log(String(a));
        //     console.log(String(b));
        //
        //     console.log(true+"nvsnvsl");  //也是转字符串,不规范

</script>

    3.转布尔值
<script>
        //Boolean(除了""会转成false,别的字符串都会转为true;除了0会转为false,别的数字都会转为true)
        //     console.log(Boolean("乱写点啥都是true"));  //true
        //     console.log(Boolean(""));   //false
        //     console.log(Boolean(" "));  //true
        //     console.log(Boolean(43));  //true
        //     console.log(Boolean(0));  //false

</script>

    了解转义符
<script>
    //转义字符
    //     document.write("哈哈哈\n嘻嘻嘻\n嘿嘿嘿");  //转不了
    //     alert("哈哈哈\n嘻嘻嘻\n嘿嘿嘿");
    //     console.log("哈哈哈\n嘻嘻嘻\n嘿嘿嘿");

</script>

    隐式转换
<script>
        let num1=true;
        let num2="true";
        console.log(true=="1"); //true
        /*
        *在比较运算中,如果有一个操作数是布尔值,先将布尔值转为 true转1,false转0
        * */

        console.log(NaN==NaN); //无法比较false

</script>

转义符
在这里插入图片描述

编程三大结构

	1.顺序结构(代码原始顺序,自上而下顺序执行)
    2.选择(分支)结构
        单分支:
            if(条件){  <!--条件:true/false-->
                如果条件成立执行里面的内容
            }双分支:
            if(条件){
                执行语句1
            }else{
                执行语句2
            }

        多分支:
            if(条件){
                执行语句1
            }else if(条件2){
                执行语句2
            }else if(条件3){
                执行语句3
            }
            ......
            else{  <!--不是必须的-->
                执行语句
            }


            switch case(一般需要搭配break使用,用来跳出只执行当前语句)
            switch(变量){
                case 值:执行语句1;
                case 值2:执行语句2;
                case 值3:执行语句3;
                ......
                default:执行默认语句
            }


    3.循环结构
        结构:
            for(表达式1;表达式2;表达式2){
                    循环体
              }
            表达式1:循环变量初始化
            表达式2:条件判断(哪里结束)会得到布尔值
            表达式3:循环变量的改变(如何循环)
单分支选择结构
<script>
        /*单分支*/
        // let a=-10;
        // if(a<0){ //true
        //     alert("a是"+a);
        // }
        // alert("程序结束");

        /*双分支*/
        // let a=10;
        // if(a>=0){
        //     alert("大于等于0")
        // }else{
        //     alert("小于0")
        // }

        /*多分支*/
        // let grade=80;
        // if(grade>=60&&grade<70){
        //     alert("D")
        // }else if(grade>=70&&grade<80){
        //     alert("C")
        // }else if(grade>=80&&grade<90){
        //     alert("B")
        // }else if(grade>=90&&grade<=100){
        //     alert("A")
        // }else{
        //     alert("其他")
        // }

        //单分支、多分支、双分支,只会选择其中一个执行
        //多分支如果条件都满足的话,只会执行最前面一条满足的条件


        /*多个if:依然是单分支,只要条件满足就执行*/
        // let a=50;
        // if(a<100){
        //     alert("a<100")
        // }
        // if(a==50){
        //     alert("a==50")
        // }
        // if(a>49){
        //     alert("a>49")
        // }


        // let a=prompt("输入数字");  //6,通过输入框拿到的数据类型是字符串
        // console.log(a);
        // console.log(typeof a);
        //
        // console.log(a===6);  //全等:false及比较类型也比较值


        let day=prompt("请输入今天是星期几:");
        // switch (day){
        //     case "1":alert("今天星期1");break;
        //     case "2":alert("今天星期2");break;
        //     case "3":alert("今天星期3");break;
        //     case "4":alert("今天星期4");break;
        //     case "5":alert("今天星期5");break;
        //     case "6":alert("今天星期6");break;
        //     case "7":alert("今天星期7");break;
        //     default:alert("输入错误!!!");
        // }

        // if(day==="1"){
        //     alert("星期1")
        // }else if(day==="2"){
        //     alert("星期2")
        // }
        // ......
        // else {
        //     alert("输入错误")
        // }

    </script>
if的嵌套
<script>
/*1.如果是女的才考虑
    *       白?
    *           富?
    *               美?
    *                   我要!
    * */
    let an1=prompt("是不是女的? 1.是 2.不是");
    if(an1==1){ //女的
        let an2=prompt("白吗?1.白  2.不白");
        if(an2==1){ //女=>白
            let an3=prompt("富吗?1.富  2.不富");
            if(an3==1){ //女=>白=>富
                let an4=prompt("美吗?1.美  2.不美");
                if(an4==1){ //女=>白=>富=>美
                    alert("我要!!!");
                }else{
                    alert("女生白富美!!!");
                }
            }else{ //女=>不富
                alert("不富");
            }
        }else{ //女=>不白
            alert("不白");
        }
    }else{ //男的
        alert("男的");
    }

</script>
循环基本结构
<script>
    // for(let i=0;i>100;i++){
    //     document.write("下次一定")
    // }
    /*
    * 1.申明循环变量,进行变量初始化(只执行一次)  let i=0
    * 2.判断条件  i>100
    * 3.执行循环体内容  document.write("下次一定")
    * 4.循环变量的改变  i++
    * 5.再次进入条件判断  i>100
    * 6.执行循环体内容  document.write("下次一定")
    *
    * 反复执行4-6的步骤
    */


    //道歉不知道是否被原谅,需要一直道歉,1.不原谅  2.考虑一下  3.原谅了
    // for(let i=1;true;i++){
    //     let a=prompt("原谅了吗?1.不原谅  2.考虑一下  3.原谅了" )
    //     if(a==1){
    //         document.write("下次一定改正,第"+i+"次道歉")
    //     }else if(a==2){
    //         continue; //本次循环不执行,后面的代码同样不执行
    //         document.write("考虑一下,第"+i+"次,休息一下")
    //     }else if(a==3){
    //         document.write("原谅了,第"+i+"次,原谅你了")
    //         break; //跳出本层循环
    //         document.write("break后面的代码不执行了")
    //     }
    // }


    //求1加到100的总和
    let sum=0;
    for(i=1;i<=100;i++){
        sum=sum+i;
    }
    console.log(sum)

</script>
while循环、循环嵌套

while循环

<script>
    //先验证后循环
    // for(i=0;i<0;i++){
    //     console.log("执行吗?")
    // }


    /*
    while循环(先验证后循环)
    while(条件){
       循环体
    }
    */
    // let c=1;
    // while(c<=3){
    //     console.log("c小于3");
    //     c++;
    // }


    /*
    先循环后验证(不管条件是否满足,至少先执行一次)
    */
    // let c=5;
    // do{
    //     console.log("祝我发财!!!");
    //     c++;
    // }while(c<=3)


    //死循环
    // for(let a=0;a>=0;a++){
    //     console.log("出不去")
    //     if(a>50){
    //         break;
    //     }
    // }

</script>

循环嵌套

<script>
  /*
  //第一行
  for(let i=0;i<50;i++){
    document.write("*");
  }
  document.write("<br>");
  //第二行
  for(let i=0;i<50;i++){
    document.write("*");
  }
  document.write("<br>");
  */

  // for(let j=0;j<5;j++){
  //   for(let i=0;i<50;i++){
  //     document.write("*");
  //   }
  //   document.write("<br>");
  // }



  //跳出多层循环
  //可为每层循环做标记,break跳出指定标记层,如:break one
  one:
  for(let i=1;i<=9;i++){
        two:
        for(let j=1;j<=i;j++){
            if(i==5){
                alert(i+"跳出多层循环")
                break one;
            }
        }
        alert(i+"测试是否跳出成功")
  }

</script>

数组

1.什么是数组?
    是一个连续的存储空间
    数组是用来装数据的,可以装多个数据,并且可以装任意数据类型       
              
2.如何创建数组
    (字面量方式创建数组):
        let arr3=[];
        let arr4=[1,true,"dcdc",undfinde];
        数组的长度:arr.length
        数组的下标是从0开始的
        数组的循环(遍历)


    (通过new创建数组)
        let arr1=new Array();  //创建一个空数组
        let arr2=new Array(132,6,"acd",null,undefined,true); //创建数组的同时进行初始化赋值
        let arr5=Array(6); //new可省略,创建数组,并设置数组长度

3.数组的方法(记忆)
    (1)添加:
        (通过赋值添加数据):通过下标赋值的方法向数组添加内容:arr[1]="a";
        (通过数组提供的push方法添加数据):let a="b";  arr3.push(a);   或者  arr3.push(数据);

    (2)删除:
        arr.pop();   //从后往前删

        arr.shift();  //从前往后删

        arr.splice(起始下标,删除几个);  //删除指定的内容

    (3)替换:
        (通过下标重新赋值替换):
                                arr[0]="1";
                                arr[0]="hello";

        arr.splice(起始下标,删除几个,要替换的内容)

   (4) 插入:(不删除原有内容,插入新的数据) arr.splice(起始下标,0,插入的内容)

   (5)合并:(合并之后会返回一个新数组,原有数组不受影响) arr.concat(arr3)



    push,splice,concat都可以向数组添加数据,区别?

        push向数组最后添加数据,会改变原有数组长度
        splice向数组的指定位置添加数据,会改变原有数组长度
        concat返回一个新的数组,不会改变原有的数组



    (6)抽取/截取:(截取之后会返回一个新的数组,不会改变原有的数组)   arr.slice(起始下标(包含),结束下标(不包含))

    (7)数组的串联:(返回一个字符串,不会改变原有的数组)  数组.join(连接符)

                [1,2,3]  变成   1连接符2连接符3


    (8)数组的反转:数组.reverse()

    (9)清空数组:
            arr=[];
            arr.length=0;
            arr.splice(0,arr.length);


    (10)复制(注意:堆-栈中的地址指向问题,见4.堆栈html):重新申明一个数组,循环复制,不要直接赋值


4.Math对象
    js原生内置对象,主要提供一些常用的数学方法和计算

    1)随机数: Math.random()  拿到的是[0,1)之间的随机数

               其它区间公式(注意根据需求是否要包含下限): 随机数*(大数-小数)+小数

    2)四舍五入:Math.round(5.5)

数组的方法

<script>
    // var a=1;
    // let b=1;
    // let c=3;
    let arr=[1,true,"dcdc",null,undefined,3];
    console.log(arr); //整个数组
    console.log(arr.length); //数组长度
    console.log(arr[0]); //第0位
    //遍历数组
    for(let i=0;i<arr.length;i++){
        console.log(arr[i])
    }



    let arr1=new Array(132,6,"acd",null,undefined,true);
    console.log(arr1.length);
    console.log(arr1[0]);

    let arr2=Array(5); //只有1个值的时候代表数组长度(new可省略)
    console.log(arr2); //空数组
    console.log(arr2.length); //数组长度:5
    console.log(arr2[0]); //undefined

    //已知长度把值存进去
    for(let i=0;i<arr2.length;i++){
            arr2[i]=i;
    }
    console.log(arr2);



    //添加arr.push(),在最后添加
    arr2.push("a");
    console.log(arr2);

    //删除arr.pop(),从末尾往前删1个
    arr2.pop();
    console.log(arr2)

    //删除arr.shift(),从开头往后删1个
    arr2.shift();
    console.log(arr2)

    //删除arr.splice(),指定位置,删除几个
    arr2.splice(1,2)
    console.log(arr2)

    //替换
    arr2[0]="下标重新赋值替换"
    console.log(arr2)

    //替换arr.splice()
    arr2.splice(1,1,"hello")
    console.log(arr2)

    //插入arr.splice(),删除0个
    arr2.splice(1,0,"哈哈哈哈")
    console.log(arr2)

    //合并arr.concat(arr3),会返回一个新数组,原有数组不会影响
    let arr3=["嘿嘿嘿"];
    let newArra=arr2.concat(arr3)
    console.log(newArra)
    console.log(arr2); //原有数组不会影响
    console.log(arr3);


    //截取,截取之后会返回一个新的数组,原有数组不会影响
    let arrNew=arr2.slice(1,3);
    // let arrNew=arr2.slice(1,-1);  //负数就是反着数-1开始
    console.log(arrNew);
    console.log(arr2); //原有数组不会影响


    //数组的串联
    let str=arr2.join("+");
    console.log(str);
    console.log(typeof str);
    console.log(arr2);


    //数组的反转
    console.log(arr2.reverse())


    //清空数组
    // arr2=[]
    // console.log(arr2)
    //
    // arr2.length=0;
    // console.log(arr2)

    arr2.splice(0,arr2.length)
    console.log(arr2)

</script>

Math对象

<script>
    //随机数
    let num=Math.random();  //获取[0,1)之间的随机数
    console.log(num)

    console.log(parseInt(num*100));  //[0-100)之间

    //20-50之间的数(需要注意:根据需求是否需要包含下限)
    let num1=parseInt(Math.random()*30+20);  //Math.random()*30表示[0,30)的数,+20表示抬高底数,变成[20,50)
    console.log(num1)


    //四舍五入
    console.log(Math.round(5.5));  //6

    //向上取整
    console.log(Math.ceil(5.01));  //6

    //向下取整
    console.log(Math.floor(5.9));  //5

    //数幂
    console.log(Math.pow(2,3));  //2的3次方

    //平方根
    console.log(Math.sqrt(9));  //3

    //绝对值
    console.log(Math.abs(-123));  //123

</script>

堆-栈的理解

<script>
    //定义一个数组,并给出8个任意的随机初始值
    let arr=Array(8);
    for(let i=0;i<arr.length;i++){
        arr[i]=parseInt(Math.random()*100);
    }

    //arr2的数组内容和arr一样,怎样正确赋值?

    //错误赋值:
    // let arr2=arr;  //不能修改,改一个另一个也会变化。栈存的是指向堆的地址,arr中的地址给力arr2,所以它们指向堆的同一个地址,所以内容一样
    // arr[0]=6;  //改的还是arr[0],但是arr2[0],也随着改变了
    // console.log(arr);
    // console.log(arr2);

    //正确赋值:
    let arr2=[];  //让arr2是一个新数组
    for(let i=0;i<arr.length;i++){
        arr2[i]=arr[i];
    }
    arr[0]=6; //这里就只改了arr[0],没有改arr2[0]的内容
    console.log(arr);
    console.log(arr2);


    let arr6=Array(5); //只是定了它的初始长度,如果后面继续添加也是可以的
    arr6[5]=9;
    console.log(arr6)

</script>

在这里插入图片描述

函数

什么是函数?
    可以理解为方法,方法里面有很多步骤。
    
语法:
    1.无参函数:
            function 函数名(){
                //函数体,要执行的内容
            }

            调用:函数名()


    2.有参函数:
            function 吃饭(钱){
                去食堂
                排队
                拿餐盘
                打饭菜
                给钱
                开始吃饭
            }

            吃饭(100)

            钱:形参(可以在函数内部看做是变量来使用,但是函数外部不可用)
            100:实参

            不给形参接也可以,形参也可以直接在函数内部使用arguments来替代


    3.有返回值的函数:
            function 函数名(){
                return 返回的内容
                //return之后的内容都不会被执行
            }


    4.匿名函数:
            function (){
                //函数体
            }

            通常结合变量去使用:
            let fun=function (){
                console.log("匿名函数")
            }
            fun();




    函数必须调用才会执行,不会自动执行

    undefined:未赋值
    xx is not defined:变量未声明

    全局变量:函数外部的变量,全局都可以随意调用
    局部变量:声明在函数内部的变量,它只作用于函数的内部

    所有变量尽量放在顶部:局部变量在函数顶部,全局变量在整个js顶部

function

<style>
	.div{
	    color: red;
	}
</style>
<script>
    //全局变量(放在js顶部)
    //局部变量(放在函数内顶部)


    //函数的无参\有参:----------------------------------------------------------------//

    // for(let i=0;i<10;i++){
    //     for(let j=0;j<50;j++){
    //         document.write("*");
    //     }
    //     document.write("<br>")
    // }

    function juxing(gao,kuan){
        //形参可以当做变量使用
        gao=7;
        console.log(gao);
        for(let i=0;i<gao;i++){
            for(let j=0;j<kuan;j++){
                document.write("*");
            }
            document.write("<br>")
        }
    }
    // console.log(gao,kuan); //函数外部不可用

    juxing(10,50)
    // juxing(20,100)
    // juxing()
    // juxing()


    //未赋值与未声明:----------------------------------------------------------------//

    // let a;
    // console.log(a); //undefined
    // console.log(b); //b is not defined


    //全局与局部变量:----------------------------------------------------------------//

    // let a=1; //全局变量,所有的地方都可以调用
    // function test(){
    //     let b=2; //局部变量,只作用于函数内部
    //     console.log(a); //全局
    // }
    // console.log(a); //1
    // test();
    // console.log(b); //局部(函数外部无法获取函数内部的变量):b is not defined



    //函数返回值:----------------------------------------------------------------//

    // function sum(){
    //     return 999
    // }
    // let c=sum();
    // console.log(c)

    // function sum(num1,num2){
    //     let result=num1+num2;
    //     console.log("2222")
    //     return result;
    //     console.log("1111"); //return后面的内容都不会被执行
    // }
    // let c=sum(22,33);
    // console.log(c)

    //返回多个结果
    function myMath(num1,num2){
        let mySum=num1+num2;
        let myjian=num1-num2;

        // return [mySum,myjian]; //返回个数组
        return {  //返回个对象
            mySum:mySum,
            myjian:myjian,

        };
    }
    let obj=myMath(8,1);
    // console.log(obj[0]);
    // console.log(obj[1]);
    console.log(obj.mySum);
    console.log(obj.myjian);


    //对象的写法:-----------------------------------------------------------------//

    // //数组
    // let arr=[1,2,3]; //arr[0]
    // //对象
    // let obj1={
    //     name:"月月",
    //     sex:"女",
    //     age:"23"
    // };
    // console.log(obj1.name)

    // arr=[
    //     {
    //         name:"月月",
    //         sex:"女",
    //         age:"23"
    //     },
    //     {},
    //     {}
    // ]
    // console.log(arr[0].sex);

</script>

匿名函数

<script>
    //匿名函数
    // let fun=function (){
    //     console.log("匿名函数")
    // }
    // fun();


    //匿名函数-自执行
    //括号:()
    // (function (){
    //     console.log("hahaha ")
    // })()


    //符号:  !   +   -   ~
    !function (){
        console.log("啊啊啊 ")
    }()

</script>

es6-Function

<script>
    function fName(){
        //函数体
    }

    //或者

    let myFun=function (){
        //函数体
    }
    

    //es6中的写法:

    // let myF=()=>{
    //     //函数体
    //     console.log("heheh");
    // }
    // myF();


    //带参
    // let myF=(str)=>{
    //等同于:
    let myF=str=>{  //只有一个参数可以不打括号
        //函数体
        console.log(str);
    }
    myF("hahahha");


    //有return的
    let myFF=aaa=>aaa;
    console.log(myFF("给什么就直接返回什么"));
    //等同于:
    let myFF=(aaa)=>{
        return aaa;
    }
    //等同于:
    function myFF(aaa){
        return aaa;
    }

    let a=myFF("嘿嘿嘿");
    console.log(a);

</script>

arguments

<script>
    // function test(a,b){
    //     let sum=a+b;
    //     return sum;
    // }
    // let result=test(9,9);
    // console.log(result)



    //形参不确定需要几个来接(对用户传的参数个数没有硬性要求的时候arguments)
    function test(){
        let sum=0;
        console.log(arguments); //arguments是数组

        for(let i=0;i<arguments.length;i++){
            sum+=arguments[i];
        }

        return sum;
    }
    let result=test(9,9,56,48,98);
    console.log(result);


</script>

字符串

字符串的创建:
    1.字面量方式:  let str="字符串";

    2.创建字符串对象: let str=new String("123456");


注意:字符串可以遍历,可以读取,但是不能赋值改变其中某个值,唯一能够改变就是重新全部赋值


字符串的方法:

    1.str.charAt(下标)   找到字符

    2.str.slice(起始下标,结束下标(不包含))   截取字符串

    3.str.indexOf("字符")   字符在字符串中第一次出现的位置
      str.search("字符")    可以配合正则表达式使用

    4.str.replace(要替换谁,替换成什么)   替换字符串,只能替换找到的首个字符

    5.str.split(根据哪个字符来进行分割)   分割字符串(返回的是数组)

    6.str.trim()   清空首尾空格

    7.str.includes("字符")   是否包含某个字符(会返回布尔值)
    
    
<script>

    //注意:

    // fun(); //函数可在前调
    // function fun() {
    //
    // }
    // fun(); //可在后调

    // fun2(); //报错(初始化前无法访问"fun2"):Cannot access 'fun2' before initialization,应该声明变量在前,使用变量在后
    // let fun2=function (){
    //     console.log("hahah")
    // }

</script>

字符串方法

<script>
    // let str="字符串";
    // let str2=new String("字符串");

    // console.log(str);  //字符串string
    // console.log(str2);  //字符串对象object
    // console.log(str==str2);  //true它们的值是相同的。如果===那么就是false数据类型不同。它们都是不可控长度的,都能继续往里面添加内容、属性。


    // console.log(str.length)
    // console.log(str[0]);  //通过下标找到某个指定字符
    // str[0]="不";  //字符串可以遍历,可以读取,但是不能赋值改变其中某个值,唯一能够改变就是重新全部赋值
    // console.log(str);
    //
    // for(let i=0;i<str.length;i++){
    //     str[0]="不";
    //     //这样也改不了
    // }




    //字符串的方法:

    //1.str.charAt(下标)   找到字符
    let str="一个字字符串";
    console.log(str.charAt(2));


    //2.str.slice(起始下标,结束下标(不包含))   截取字符串
    console.log(str.slice(1,3));


    //3.str.indexOf("字符")   字符在字符串中第一次出现的位置
    //str.search("字符")    可以配合正则表达式使用
    console.log(str.indexOf("字"));
    console.log(str.search("字"));


    //4.str.replace(要替换谁,替换成什么)   替换字符串,只能替换找到的首个字符
    let newStr=str.replace("字符","富")
    console.log(newStr)
    console.log(str)


    //5.str.split(根据哪个字符来进行分割)   分割字符串(返回的是数组)
    let str1="你好啊~哈哈哈哈哈~很美好~ ~";
    let strArr=str1.split(" "); //是数组
    console.log(strArr)
    strArr[1]="呵呵呵"; //变成数组后就能够重新赋值
    console.log(strArr)
    //转换一下:字符串通过分割.split(),转换成数组后,再进行数组的串联.join(),重新变回字符串
    console.log(strArr.join(""))


    //6.str.trim()   清空首尾空格
    let str2="  哈哈哈哈  "
    console.log(str2)
    console.log(str2.trim())


    //7.str.includes("字符")   是否包含某个字符(会返回布尔值)
    let str3="你好啊你在吗";
    let str4="啊好";
    let str5="在吗";
    console.log(str3.includes(str4))
    console.log(str3.includes(str5))

</script>

日期对象

<script>

    let d=new Date(); //日期对象,系统当前时间
    console.log(typeof d); //object,但凡使用了new关键字得到的数据都是object
    console.log(d); //Fri Dec 08 2023 12:09:22 GMT+0800 (中国标准时间)


    // let d=new Date(2001,0,1,0,0,0); //年月日时分秒,月份是从0开始的
    // console.log(d)


    console.log("显示系统语言的日期方式:"+d.toLocaleString()); //2023/12/8 12:08:51
    console.log("获取年份:"+d.getFullYear());
    console.log("获取月份:"+(d.getMonth()+1)); //月份从0开始的
    console.log("获取日期:"+d.getDate());
    console.log("获取星期几:"+d.getDay());
    console.log("获取时:"+d.getHours());
    console.log("获取分:"+d.getMinutes());
    console.log("获取秒:"+d.getSeconds());
    console.log("获取毫秒:"+d.getMilliseconds());


    /*
    练习:
    调用函数,如果向函数传入参数,年月日时分秒,则页面显示传入日期。
    如果没有传入参数,则显示系统当前时间。
    2010年11月9日11时56分
    2022年6月8日14时39分
    */

    function myDate(){
        // console.log(arguments);

        let d=new Date();
        if(arguments.length==0){
            //没传参
            document.write(d.getFullYear()+"年"+(d.getMonth()+1)+"月"+d.getDate() +"日"
                           +d.getHours()+"时"+d.getMinutes()+"分"+d.getSeconds()+"秒")
        }else{
            //传了参
            document.write(arguments[0]+"年"+arguments[1]+"月"+arguments[2]+"日"
                    +arguments[3]+"时"+arguments[4]+"分");

        }
    }
    myDate(2010,11,9,11,56)
    myDate();

</script>

let与var的区别

<script>
    //let(es6中的),var这两个关键词申明变量
    //let的作用域在块,不存在变量提升
    //var存在变量提升


    //例子:
    // var a=["a",1,true,null,undefined,{},[],function(){}];
    // var a=[];
    //
    // for(let i=0;i<10;i++){ //i=0
    //     a[i]=function (){  //a[0]=function(){console.log(0)}
    //         console.log(i);
    //     }
    // }
    //
    // //let每一次循环的i都是单独的,var的i混用的
    // console.log(a);
    // a[0](); //var 10    let 0
    // a[1](); //var 10    let 1
    //
    // console.log(i); //var的i  10
    // console.log(i); //let的i  i is not defined



    // // let hehe;
    // function test(){
    //     // hehe="呵呵";
    //     hehe="呵呵";  //不写let或var,不声明,全局变量(不过这个全局变量声明在函数的内部而已,要调用函数才能知道函数内部有个全局变量,外部才可以去获取到它)
    // }
    //
    // // console.log(hehe); //hehe is not defined 因为没声明
    // // console.log(hehe); //undefined 没调函数所有没赋值
    // test();
    // console.log(hehe); //呵呵



    function test(num){
        // console.log(num); //在函数内部可以当做变量使用
        if(num!=undefined){
            //传了参
            var a=9;
        }else{
            //没传参
            let a=3;
            console.log("条件判断中a的值:"+a);
        }
        console.log("条件判断外a的值:"+a);
    }

    test(); //3  undefined
    test(7); //9

</script>
  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值