WebDay03 JavaScript基础 基础语法 函数 事件内置对象

一 JavaScript基础语法

1.1 JS运算符

js与java的运算符基本一样,什么算数运算符、赋值运算符、逻辑运算符等等,不需要死记硬背,写程序会用就行:

1. 算数运算符
		+ - * / % ++ --
2. 赋值运算符
		= += -= *= /= %=
		eg. a+=1 -> a= a+1 
3. 比较运算符
		>   < 	==(===恒等于) 	!=(!==不恒等于)
4. 逻辑运算符
		&& ||  !()
5. 三元(目)运算符
		条件表达式?为真:为假

关注js与java区别的运算符

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>01-JS运算符</title>

</head>
<body>

    <script>
            /*
            *   js运算符: 讲与java不同的地方
            *
            *   # 在js中,任意类型都能用运算(以+号为例)
            *       1. string
            *       2. number
            *       3. null
            *       4. boolean
            *       5. undefined
            *
            *     规则:
            *       1. 任意类型 + string = string
            *       2. 如果其他类型(非string), 跟number相加,结果也是number
            *           a. boolean  true=1 false=0
            *           b. null = 0
            *           c. undefined -> NaN (not a number)
            * */
            let i = 100;
            let j;
            console.log(i + j)
    </script>
    <script>
        /*
        *  比较运算符:
        *      1.  ==(===恒等于)
        *        a. == 是比较两个变量的字面值(常用)
        *        b. === 不仅比较两个变量的字面值,也比较类型
        *
        *      2.  !=(!==不恒等于)
        *        a. !=  字面值是否相等
        *        b. !== 字面值或类型是否相同(只要一个不同就为true)
        *
        * */
        // let a = 1; // number
        // let b = true; // boolean  true=1

        let a = 100; // number
        let b = "100"; // string

        console.log(a == b) // true
        console.log(a === b)// false
    </script>
    <script>
        /*
        * # 三元(目)运算符
		        条件表达式?为真:为假
        * */
        let c = 2;
        let d = 1;
        let result = c > d? true : false
        console.log(result);
    </script>
</body>
</html>

1.2 JS流程控制

高级语言中的三种基本结构:顺序、分支、循环
① 条件判断

1. if判断
		if (条件表达式) {
            代码块;
        } else if(条件表达式) {
            代码块;
        } else {
            代码块;
        }
		
2. switch判断	
		switch(条件表达式){
            case 满足条件1 :
            	代码块 
            	break;
            case 满足条件2 :
            	代码块
                break;
            default:
            	默认代码块;
		}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>02-条件判断</title>

</head>
<body>

    <script>
        /*
            var : es6之前的变量声明 后来被es6的 let/const替代
                es6(所有主流浏览器都支持)

        *   java中判断条件是 结果为boolean的表达式
        *       js跟java不同的是: 任意类型都能当成判断条件
        *
        *       1. string -> 空串为false,非空串true
        *       2. number -> 非0为true,0为false
        *       3. boolean
        *       4. null  -> false
        *       5. undefined -> false
        * */
        let result
        if(result){
            console.log(true)
        }else{
            console.log(false)
        }
    </script>
</body>
</html>

② 循环语句

1. 普通for循环
		for(let i= 0; i<10; i++){
    		需要执行的代码;
		}

2. 增强for循环
		for(let element of array){
            需要执行的代码;
		}
		
3. 索引for循环
		for(let index in array){
            需要执行的代码;
		}

4. while循环
		while (条件表达式) {
			需要执行的代码;
		}
		
5. do..while循环
		do{
            需要执行的代码;
		}while(条件表达式);
		
6. breakcontinue
		break: 跳出整个循环
		continue:跳出本次循环
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>03-循环语句</title>

</head>
<body>

<script>
    /*
    * 1. 普通for循环
		for(let i= 0; i<10; i++){
    		需要执行的代码;
		}

    2. 增强for循环(for of)
            for(let obj of array){
                需要执行的代码;
            }

    3. 索引for循环(for in) -> 了解
            for(let index in array){
                需要执行的代码;
            }
    * */
        /*
        *   java 数组:
        *       String[] array = {"张三","李四","王五"}
        *   js 数组:
        *       let array = ['张三','李四','王五']
        *
        * */
    let array = ['张三','李四','王五']
    for(let i= 0; i<array.length; i++){
        console.log(array[i])
    }
    for(let element of array){
        console.log(element); // 数组中的每个元素
    }

    for(let index in array){
        console.log(index); // 数组中的每个元素索引
    }

</script>
</body>
</html>

1.3案例: 乘法表

在这里插入图片描述

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        table{
            border-collapse: collapse;
            /* 边框不包裹内容的话,折叠*/
        }
    </style>
</head>
<body>
<!--   <table border="1px" cellspacing="0px" cellpadding="5px">
        <tr>
            <td>
                   1x1=1
            </td>
        </tr>
    </table>-->

    <script >
        /*
        * 99乘法表:
        *   外层循环 for i=1~9  //行
        *   内层循环 for j=1~i // 列
        * */
        /*
        *   js字符串用双引, html属性值用单引
        * */
        document.write("<table border=\"1px\" cellspacing='0px' cellpadding='5px'")
        for (let i=1; i<=9; i++){
            document.write("<tr>")
            for(let j=1; j<=i; j++){
                document.write("<td>")
                document.write(j+"x"+i+"="+i*j)
                document.write("</td>")
            }
            // document.write("<br>")
            document.write("</tr>")
        }
        document.write("</table>")
    </script>

</body>
</html>

二 JS函数【方法】

功能:js函数用于执行特定功能的代码块,为了方便理解也可以称为js方法

2.1 普通函数【重点】

语法

function 函数名(参数列表){
    函数体;
    [return 返回值;] // 中括号意思表示内容可以省略....
}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>04-普通函数</title>

</head>
<body>
    <script>
        /*
        * js中叫函数, java一般叫方法
        *    1. java的方法
        *       public static void main(String[] args){
        *           方法体
        *       }
        *
        *       修饰符 返回值类型 方法名(参数列表){
        *           方法体
        *       }
        *
        *       接口: @FunctionalInterface
        *
        *    2. js的函数
        *       function 函数名(参数列表){
        *           函数体
        *       }
        *       a. 参数列表的类型不写(let强制不写)
        *       b. 如果有返回值,直接写return
        *       c. js函数的参数可以传多个,跟参数列表可以不匹配数量, 按顺序赋值(没有重载)
        *       d. js函数体中特殊变量: arguments (默认存在的数组,会接收传入的所有参数)
        * */
            //无参无返回
        function method01(){
            document.write("呵呵")
        }
        // method01()
            //有参无返回
        function method02(a,b){
            document.write(a + b)
        }
        // method02(1,2)

        //有参有返回
        function method03(a,b){
           return a + b
        }
        let result = method03(1,2)
        // document.write("有返回:" + result)

        //js函数的参数可以传多个,跟参数列表可以不匹配数量, 按顺序赋值
        //
        function method04(a,b) {
            return a + b
        }
        //js有重载方法的必要吗? 没有 (再写就覆盖之前的)
        function method04(a,b,c) {
            return a + b + c
        }
        let result2 = method04(1,2) // a=1, b=undefined  a+b=NaN
        // document.write(result2)

        //js函数体中特殊变量: arguments (默认存在的数组,会接收传入的所有参数)
        function method05() {
            let sum = 0;// 初始值必须给,不然是undefined
            for(let i=0; i<arguments.length; i++){
                sum += arguments[i]
            }
            return sum
        }
        let result3 = method05(1,2,3,4,5)
        document.write(result3)
    </script>

</body>
</html>

2.2 匿名函数

通常与事件结合使用,咱们现在先来看一下语法。。。。

function (参数列表){
    函数体;
    [return 返回值;] // 中括号意思表示内容可以省略....
}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>05-匿名函数</title>

</head>
<body>
    <script>
        /*
        * js中的函数格式有两种
        *   1. 普通函数
        *       function 函数名(参数列表){
        *           函数体
        *       }
        *   2. 匿名函数
        *      变量 = function(参数列表){
        *           函数体
        *      }
        *
        *      a. 匿名函数没有函数名
        *      b. 匿名函数必须给变量赋值
        *
        *    补充:
        *       1. 在js,函数是一种特殊的变量类型(对象)!!!
        *       2. 匿名函数一般是用来注册事件
        * */
        function method01(a,b) {
            document.write(a + b + "哈哈")
        }
        method01(1,2)
        document.write("<br>")

        let method02 = function (a,b) {
            document.write(a + b + "呵呵")
        }
        method02(1,5)
        document.write("<br>")
        document.write(typeof method02)
        document.write("<br>")
    </script>
</body>
</html>

2.3箭头函数和系统函数.小练习

箭头函数:函数的更简单的写法
(参数列表)=>{ }
系统函数:js提供的函数,不用自己定义,直接用
eval:将传入的字符串当作JavaScript代码来执行
parseInt:将输入的字符串中的整数部分提取出来并做转换,返回整数部分

需求:随机输入5个数,然后输出比平均值大的数
技术要点:
1:如何输入:prompt
2:如何保存:保存到数组中
3:如何求平均值:遍历数组求和/数组的长度
4:如何筛选比平均值大的数:遍历数组,拿每个元素和平均值做比较

let input = [];
     for(let i=0;i<5;i++){
        let a = prompt("请输入第"+(i+1)+"个数据")
        input[i] = parseInt(a);
     }

     //求平均值
     let sums = 0;
     input.forEach((element,index)=>{
        sums += element;
     });
     let avg = sums/input.length;

     //筛选数据
     let output = [];

     input.forEach((element,index)=>{
        if(element > avg){
            output.push(element);
        }
     });
     document.write("最终的结果:"+output);


三 JS事件【重点】

事件(event):JS可以监听用户的行为,并调用函数来完成用户交互功能.

事件中的四个重要概念

        事件源:事件发生在谁身上谁就是事件源
        事件:用户的操作行为
        事件处理器:事件触发后会调用一个函数来执行,在函数中进行一些业务处理
        注册监听:将事件处理函数和事件源绑定到一起

    代码的编写流程:
        1:获取事件源
        2:给事件源绑定事件
        3:定义事件触发的函数
        4:编写函数具体的业务代码

3.1 常用事件

1. 点击事件:
        1. onclick:单击事件
        2. ondblclick:双击事件 (double: 时间间隔很短两次单击)
        
2. 焦点事件
        1. onblur:失去焦点
        2. onfocus:元素获得焦点。

3. 加载事件:
        1. onload:页面加载完成后立即发生。

4. 鼠标事件:
        1. onmousedown	鼠标按钮被按下。
        2. onmouseup	鼠标按键被松开。
        3. onmousemove	鼠标被移动。
        4. onmouseover	鼠标移到某元素之上。
        5. onmouseout	鼠标从某元素移开。
        
5. 键盘事件:
		1. onkeydown	某个键盘按键被按下。	
		2. onkeyup		某个键盘按键被松开。
		3. onkeypress	某个键盘按键被按下并松开。

6. 改变事件
        1. onchange	域的内容被改变。

7. 表单事件:
        1. onsubmit	提交按钮被点击。

3.2 事件绑定

将事件与html标签进行绑定,实现交互功能

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script>
        /*
        *   事件 : event
        *       0. 在网页上发生的一切能被浏览器检测到的行为 -> 事件
        *           1. 人为触发的
        *           2. 浏览器触发的
        *
        *   学事件是为了实现交互效果
        *       JS: 事件驱动型语言
        *
        *    某个事件被触发了,执行某个代码
        *
        *    点击事件为例 : onclick
        *
        *    给某个标签的某个事件属性赋值某个函数 : 事件注册
        *    1. 命名注册
        *       1. 在标签内声明 某个事件属性 = "函数调用"
        *
        *    2. 匿名注册
        *
        * */
        function method01(a) {
            alert("班主任来了,快跑啊!!" + a)
        }

        function method02() {
            alert("呵呵")
        }

    </script>


</head>
<body>
    <input type="button" value="点击有惊喜" onclick="method01('')" onmouseover="method02()"> <br> <br>

<input type="button" value="点击有惊喜2"  id="myid">
</body>
<script>
    /*
        document : 当前html页面
            getElementById(id值) : 通过某个id值获得元素

        script标签
            1. 写head里面(好看)
            2. body之后(省事)
     */
    var btn = document.getElementById("myid");
    /*
        当btn的点击事件被触发的时候,调用这个匿名函数

        ev : event 包含该事件触发时一些参数

        跟事件绑定的函数: 回调函数 (callback)
            将一个函数A 赋值给一个指针, 然后指针传给别的函数B或者系统C,B或C通过指针调用A
            此时A 称之为回调函数
     */
    btn.onclick = function (ev) {
        // alert("嘻嘻")
        //在控制台输出内容
        console.log(ev.clientX + "," + ev.clientY)
    }

</script>
</html>

3.3 案例:轮播图

需求

一共5张图片,实现每过3秒中切换一张图片的效果。
在这里插入图片描述
找5张图,名字命名为0.jpg,1.jpg这样有规律的,方便使用

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>06-案例:轮播图</title>
</head>
<body>
    <!--
        轮播图 : 每隔1,顺序播放图片(无限循环)

            1. java:
                int i = 0;
                while(true){
                    Thread.sleep(1000)
                    //先找到img标签对象,修改src属性
                    let img = document.getElementById("myImg")
                    i++;
                    img.src = "../img/"+i+".jpg"
                    if(i==4){
                        i = -1
                    }
                }

            2. js:
                0. js中没有Thread,没有多线程(多线程带来的并发问题,比带来的好处还多)
                了解 定时器 !(明天详细了解)
                # setInterval(value1,value2)
                    1. value1 = "函数调用"
                    2. value2 = time
                    3. 效果: 每隔time时间执行一次函数调用(无限)

                定时器不仅替代了Thread.sleep(1000),还替代了while(true)

                浏览器有个特点:
                    如果网页上的某个标签属性改变了,浏览器检测到会自动刷新网页

    -->
<div>
    <img id="myImg" src="../img/0.jpg" width="500px">
</div>
    <!--<script>
        function method01(){
            document.write("哈")
        }
        setInterval("method01()",1000)
    </script>-->

    <script>
        let i = 0;
        function method01(){
            //先找到img对象
            let img = document.getElementById("myImg")
            i++;
            img.src = "../img/"+i+".jpg"
            if(i == 4){
                i = -1
            }
        }
       setInterval("method01()",1000)
    </script>

</body>
</html>

四 JS常用内置对象【知道】

​ 内置对象: js提供好的对象, 开发者直接可以创建对象,并使用

4.1 String 对象

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>10-字符串</title>

</head>
<body>
<!--

1. 构造字符串对象可以使用
    a. 双引号
    b. 单引号
    c. 反引号(重音符) 键盘左上角 esc下面 (es6字符串模板)
        经常用在拼接字符串: 避免单双引手动拼接
            '字符串${变量名}字符串'

2. 字符串常用方法
      substring(startIndex,endIndex) 提取字符串中两个指定的索引号之间的字符。  包头不包尾
      toLowerCase() 把字符串转换为小写。
      toUpperCase() 把字符串转换为大写。
      split() 把字符串分割为字符串数组。
      trim() 去掉首尾空格

-->
<script type="text/javascript">
    // ------------ 1. 构造字符串对象可以使用  双引号,单引号,反引号
    // let str2 = new String("abc")
    let str = "abc"
    let str2 = 'abc'
    let str3 = `abc`
    console.log(str);
    console.log(str2);
    console.log(str3);

    let i = 100; // 效果: 小丽体重i斤
    let str4 = '小丽体重' + i + '斤'
    console.log(str4);

    let str5 = `小张体重${i}斤`
    console.log(str5);
    // ------------ 2. 字符串常用方法
    
    let str6 = "askfdjASDFAJSDLas"
    var s = str6.toLowerCase();
    console.log(s)
</script>
</body>
</html>

4.2 Array 对象

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>11-数组</title>

</head>
<body>
<!--

数组
    查询手册完成:
       1. 创建数组
           a.  let array = new Array('a','b','c')
           b.  let array = ['a','b','c']  -> 中括号 (常用)

           js的数组更像java中的集合,长度可以变化的,元素类型不必一致

       2. 数组常用方法
            concat() 连接两个或更多的数组,并返回结果。
            push() 向数组的末尾添加一个或更多元素,并返回新的长度。
            pop() 删除并返回数组的最后一个元素
            join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
                与 字符串.split()切割为数组 方法相反
            sort() 对数组的元素进行排序
-->
<script>
    let array1 = new Array('a','b','c')
    let array2 = ['d','e','f']

    console.log(array1);
    console.log(array2);

    for (let i = 0; i < array1.length; i++) {
        console.log(array1[i]);
    }

    // 常用方法
        //concat: 两个数组拼接, 产生新数组
    let array3 = array1.concat(array2)
    console.log(array3);

    console.log(array1.length)
        //往数组添加一个元素
    array1.push(100)
    console.log(array1.length)
    console.log(array1)
        //删除并返回最后一个元素
    let s = array1.pop();
    console.log(array1)
    console.log(s)
        //将数组转成字符串,元素之间用参数中的内容隔开(string的split方法相反)
    let str = array1.join(",");
    console.log(str);

    let arr = str.split(",")
    console.log(arr);

    let arr2 = [4, 3, 1, 2]
    console.log(arr2.sort()) // 默认升序
    console.log(arr2.sort().reverse()) // 降序

    var f = function(o1,o2){
        // return o1-o2; // 升序
        return o2-o1; // 降序
    }
    let arr3 = arr2.sort(f) // 传参: 参数还是函数类型的变量
    console.log(arr3);

    console.log(arra2.sort(function (a,b) {
        return a-b;
    }))

</script>
</body>
</html>

4.3 Date 对象

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>12-日期</title>
</head>
<body>
<!--
    日期  Date
        1. 创建对象
             let date = new Date(); 获取当前时间时间

        2. 常用方法
            toLocaleString()      转换为本地日期格式的字符串
            getFullYear() 获取日期中的year
            getMonth()   获取日期中的month
            getDate()    获取日期中的 号
            getTime()   获取时间毫秒值(时间原点: 1970110时分秒)
-->

    <script>
        let date = new Date();
        //Sun May 24 2020 14:38:34 GMT+0800 (中国标准时间:东八区)
        console.log(date);
        console.log(date.toLocaleString()); // 转换为本地日期格式的字符串
        console.log(date.getFullYear()); // 年 四位
        console.log(date.getMonth()+1);// 月 范围:0~11
        console.log(date.getDate()); // 日
        console.log(date.getTime()); // 1970年~今毫秒值
    </script>

</body>
</html>

4.4 Math 对象

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>13-数学</title>

</head>
<body>
<body>
<!--
数学运算
    查询手册完成
    1. 四舍五入 round()
    2. 向下取整 floor() 地板
    3. 向上取整 ceil()  天花板
    4. 产生随机数 random() :返回 [0,1) 之间的随机数。
            [0,1) 左闭右开区间,包含0不包含1

-->
<script >
    let n = 1234.567
    //1. 四舍五入取整
    console.log(Math.round(n));
    //2. 向下取整
    console.log(Math.floor(n));
    //3. 向上取整
    console.log(Math.ceil(n));
    //4. 产生随机数
    for (let i = 0; i < 10 ; i++) {
        console.log(Math.random());
    }
</script>
</body>
</html>

4.5 全局函数

我们不需要通过任何对象,可以直接调用的就称为全局函数

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>14-全局函数</title>

</head>
<body>
<!--
全局函数 : 在js中不需要对象,直接调用的函数

    1. 字符串转为数字
        a. parseInt() 解析一个字符串并返回一个整数。
            规则: 从左自右解析,碰到非数字解析结束,并返回已结束的结果

        b. parseFloat() 解析一个字符串并返回一个浮点数。
            (保留小数)

            NaN  not a number 这不是一个数  (这哥们六亲不认)
        c. isNaN()  判断一个字符串  如果不是数值返回true 否则返回false

    2. 对字符串编码和解码 (了解)
        encodeURI() 把字符串编码为 URI。
        decodeURI() 解码某个编码的 URI 。

        前端发送数据参数到服务器, 有专门的编码: url编码
           word=%E6%9D%AF%E5%AD%90

           浏览器会将我们输入的内容进行编码(url编码表)
                         看得懂  -> 看不懂    杯子 -> %E6%9D%AF%E5%AD%90
           服务器接收到之后要进行解码
                        看不懂 -> 看得懂    %E6%9D%AF%E5%AD%90 ->  杯子


    3. 把字符串当做js表达式来执行
        eval()  解析 JavaScript 字符串,并把它作为脚本代码来执行。

-->
<script >
        let str = '100.12px'
        let number = parseInt(str);
        console.log(number);

        let number2 = parseFloat(str);
        console.log(number2);

        let u; //undefined
        let i = 100;
        console.log(u + 100); // NaN
        console.log(isNaN(u+ 100)) //true
        console.log(isNaN("abc")) //true
        console.log(isNaN(100)) //false
</script>
<script>
    let str3 = '杯子'
    var result = encodeURI(str3); //编码
    console.log(result);

    console.log(decodeURI(result)) //解码

</script>
<script>

    let str4 = '<h1>呵呵</h1>'
    document.write(str4)

    /*
    *   浏览器 访问 服务器, 服务器会返回一段 字符串命令(js)
    * */
    let str5 = 'console.log(1234)' //js代码的字符串
    eval(str5) // 解析js代码的字符串, 然后执行js

    // console.log(1234)
</script>
</body>
</html>

在这里插入图片描述

4.6 Json【重要】

JSON(JavaScript Object Notation):是一种轻量级的数据交换格式。

  • 它是基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于计算机解析和 生成,并有效的提升网络传输效率。

在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JSON</title>
</head>
<body>
    
</body>
<script>
    //定义天气对象
    let weather = {
        city : "北京",
        date : "2088-08-08",
        wendu : "10° ~ 23°",
        shidu : "22%"
    };

    //1.将天气对象转换为JSON格式的字符串
    let str = JSON.stringify(weather);
    document.write(str + "<br>");

    //2.将JSON格式字符串解析成JS对象
    let weather2 = JSON.parse(str);
    document.write("城市:" + weather2.city + "<br>");
    document.write("日期:" + weather2.date + "<br>");
    document.write("温度:" + weather2.wendu + "<br>");
    document.write("湿度:" + weather2.shidu + "<br>");
</script>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值