JavaScript编程(上篇)

1. 概述

1.1 JavaScript的作用

  • 作用:实现与用户交互,提升网页的功能,提高用户体验

1.2 JavaScript与Java的区别

特点JavaJavaScript
面向对象完全面向对象(继承、封装、多态)基于对象,不完全面向对象
运行方式编译型,生成中间文件字节码解释型语言,不生成中间文件,直接运行浏览器即可
跨平台安装虚拟机可以跨平台运行在浏览器,只要有浏览器就可以执行
大小写区分大小写区分大小写
数据类型强类型(声明变量前必须要先明确数据类型)弱类型,定义字符串,可以赋值一个整数

2. JavaScript的基础语法

2.1 JavaScript的语法组成

组成部分作用
ECMA Script一种脚本语言规范,JavaScript的核心语法基础,定义JS中的基本语法
BOMBrowser Object Model 浏览器对象模型:操作浏览器的各种对象
DOMDocument Object Model 文档对象模型:用于操作网页中各种标签元素

2.2 JavaScript的编写方式

  1. 编写在html中的head标签内的<script>标签内。
    • 格式:
    <script type="text/javascript">
        //执行语句
    </script>
    
    • 优点:结构简单。
    • 缺点:代码耦合度高, js代码与html代码混合在一起;复用性差。
  2. 引入外部的js文件。
    • 格式:
    <script type="text/javascript" src="js文件.js"></script>
    
    • 注意事项
    1. 一个

2.3 JavaScript的注释

语言注释语法
HTML<!-- 注释 -->
CSS/\* 注释 \*/
JavaScript// 单行注释 /\* 多行注释 \*/

2.4 变量

2.4.1 变量的定义
  • 格式:

    var 变量名 = 数据;
    
2.4.2 变量定义的特点
  1. JS是弱类型语言,不同的数据类型之间可以相互赋值
  2. var关键字可以省略,但是省略的时候会出现局部变量和全局变量的区分,建议还是写上;
  3. 变量可以重复定义,后定义的同名变量会直接覆盖前面的同名变量,前后定义赋予的值甚至可以是不同类型;
  4. 变量定义的作用范围不受大括号限制,但是函数内定义的局部变量还是只能是在函数内才起作用;
  5. 一个变量存储的的数据可以随时发生变化。
  6. 一个变量的数据类型是取决当前存储的数据

2.5 数据类型

2.5.1 五种原始数据类型
关键字说明
number数值型:包括整数和浮点数
boolean布尔类型:true/false
string字符串类型:包含字符和字符串
null只有一个值的类型是 Null,它只有一个专用值 null ,表示引用数据类型变量值的占位符
undefined未定义的类型

何为未定义类型?

未定义类型指只声明变量而没有给变量赋值。
2.5.2 引用数据类型
关键字说明
object对象类型:JS内置对象或自定义对象
2.5.3 typeof操作符
  1. 作用:判断指定的变量数据类型

  2. 格式:typeof(变量名) 或 typeof 变量名

    typeof(变量名) 
    /*或*/
    typeof 变量名
    
注意事项

typeof运算符对null值会返回Object,原因是JavaScript初期犯的错误被沿用下来。null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值

示例代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css"></style>
    <script type="text/javascript">

        var a = 10;
        document.write("a=" + a + " 数据类型:" + (typeof  a) + "<br/>");
        var b = 3.1415;
        document.write("b=" + b + " 数据类型:" + (typeof  b) + "<br/>");
        var c = null;
        document.write("c=" + c + " 数据类型:" + (typeof  c) + "<br/>");
        var d = 'd';
        document.write("d=" + d + " 数据类型:" + (typeof  d) + "<br/>");
        var e = "abcde";
        document.write("e=" + e + " 数据类型:" + (typeof  e) + "<br/>");
        var f = true;
        document.write("f=" + f + " 数据类型:" + (typeof  f) + "<br/>");
        var g;
        document.write("g=" + g + " 数据类型:" + (typeof  f) + "<br/>");
        var h = {
            name:"笨蛋",//注意赋值是用:而不是用=	两个变量之间是用,分隔
            age:18
        };
        document.write("h的类型:" + typeof(h) + "<br/>");
        document.write("h的名字:" + h.name + "<br/>");

    </script>
</head>
<body>

</body>
</html>
2.5.4 字符串转换成数字类型
  • 从网页中获取的数据都是String类型,为了数据比较,有时需要转为数据类型
转换函数作用
parseInt()将一个字符串转成整数,如果一个字符串包含非数字字符,那么parseInt函数会从首字母开始取数字字符,一旦发现非数字字符,马上停止获取内容。
parseFloat()将一个字符串转成小数,转换原理同上。
isNaN()转换前判断被转换的字符串是否是一个数字,非数字返回true
注意事项

使用parseInt()和parseFloat()时,字符串的首字母需要是数字字符,否则转换的结果是NaN.

示例代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>字符串转换成数字类型</title>
    <style type="text/css"></style>
    <script type="text/javascript">
        //var age = "a10b12"; //转换后的结果为NaN
        var age = "10b12";  //转换的结果为10
        age = parseInt(age);
        document.write("age = " + age + "<br/>");

        var price = "49.99b66.6";  //转换的结果为49.99
        document.write("price不是数字?" + isNaN(price) + "<br/>");

        price = parseFloat(price);
        document.write("price = " + price + "<br/>");


        var num = "60";
        document.write("num不是数字?" + isNaN(num) + "<br/>");

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

2.6 常用运算符

2.6.1 算术运算符
运算符描述
+
-
**
/
%取余
++自增
自减
注意事项
  1. 任何类型的数据都可以使用算数运算符参与运算
  2. 任何类类型的数据都可以与boolean类型数据运算
2.6.2 赋值运算符
运算符例子描述
=x = y赋值
+=x += y加等
-=x -= y减等
*=x *= y乘等
/=x /= y除等
%=x %= y余等
2.6.3 比较运算符
运算符描述
==等于
===值及类型均相等(恒等于)
!=不等于
!==值与类型均不等(不恒等于)
>大于
<小于
>=大于或等于
<=小于或等于
注意事项
  1. 数字可以与字符串进行比较,字符串可以与字符串进行比较。字符串与数字进行比较的时候会先把字符串转换成数字然后再进行比较(隐含字符串转为数字)

  2. **=====的区别: **

    • == 比较的是两个数据的值是否一致
    • === 比较的是两个数据的值与类型是否一致
2.6.4 逻辑运算符
运算符描述
&&
||
!

注意:js中没有单与/单或

2.6.5 三目运算符
  • 格式和用法与Java的三元运算符一致。

2.7 在浏览器中调试js

  • 可以右键-检查或右键-审查元素调试,也可以直接f12
2.7.1 语法错误
  • 网页中有部分内容没输出/丢失内容☞直接查看后台的错误信息

在这里插入图片描述

2.7.2 debug调试
  • 输出的内容不吻合预期

在这里插入图片描述

使用步骤:f12后设置断点(单击代码),设置监视值,然后按全部执行按钮(此时是个暂停符号),再刷新网页,此时页面会执行到断点代码后会暂停,再按下一步观看效果(反正能使用下一步即可)

2.8 流程控制语句

  • 顺序,分支,循环
2.8.1 if判断
if 语句:

在一个指定的条件成立时执行代码。

if(条件表达式) {
	//代码块;
}
if…else 语句

在指定的条件成立时执行代码,当条件不成立时执行另外的代码。

if(条件表达式) {
	//代码块;
}
else {
	//代码块;
}
if…else if…else 语句

使用这个语句可以选择执行若干块代码中的一个。

if (条件表达式) {
	//代码块;
}
else if(条件表达式) {
	//代码块;
}
else {
	//代码块;
}
注意事项

条件判断可以使用非逻辑运算符

数据类型为真为假
number非00
string非空串空串
undefined/
NaN(Not a Number)/
object非nullnull
2.8.2 swtich多分支
语法一:case后使用变量,与Java相同
switch(变量名) {
  case 常量值:
     break;
  case 常量值:
     break;
  default:
      break;
}
语法二:case后使用表达式
switch(true) {  //变量名要根据表达式可能的结果进行定义,如果表达式的结果分为true和false两种,可以用true代替
  case 表达式:     
	break;
  case 表达式:
	break;
  default:
    break;
}
案例代码

需求:通过prompt输入的分数,如果90-100之间,输出优秀。80-90之间输出良好。60~80输出及格。60以下输出不及格。其它分数输出:分数有误。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>判断分数</title>
    <style type="text/css"></style>
    <script type="text/javascript">

        //使用prompt方法淡出输入框
        var score = window.prompt("请输入你的分数");

        switch (true){
            case score>=90&&score<=100:
                document.write("你的成绩优秀");
                break;
            case score>=80&&score<=89:
                document.write("你的成绩良好");
                break;
            case score>=60&&score<=79:
                document.write("你的成绩及格");
                break;
            case score>=0&&score<=59:
                document.write("你不及格");
                break;
            default:
                document.write("你输入的分数有误");
                break;
        }

    </script>
</head>
<body>

</body>
</html>
2.8.3 循环
2.8.3.1 while语句:

当指定的条件为 true 时循环执行代码

while (条件表达式) {
    需要执行的代码;
}
2.8.3.2 do-while语句:

最少执行1次循环

do {
    需要执行的代码;
}
while (条件表达式)
2.8.3.3 for 语句

循环指定次数

for (var i=0; i<10; i++) {
	需要执行的代码;
}
break和continue的区别:
  • break: 跳出整个循环
  • continue:跳出本次循环
2.8.3.4 案例代码

需求:根据输入的数字显示乘法表

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>九九乘法表</title>
    <style type="text/css">
        table{
            /*边框设置为细线模式*/
            border-collapse: collapse;
        }
        td{
            padding:5px;
        }
        td:hover{
            color: blue;
            background-color: violet;
        }
    </style>
    <script type="text/javascript">
        var num = window.prompt("请输入一个数字");
        //创建表格,获取效果
        document.write("<table border='1px'>");
        //外循环控制行
        for(var i = 1; i <= num; i++) {
            document.write("<tr>");
            //内循环控制输出内容
            for(var j = 1; j <= i; j++){
                document.write("<td>");
                document.write(j + "x" + i + "=" + (j*i));
                document.write("</td>");
            }
            document.write("</tr>")
        }
        document.write("</table>")
    </script>
</head>
<body>

</body>
</html>

2.9 函数(重点)

2.9.1 概述
  • 被调用时可以重复使用的代码块,类似Java里的方法

  • 定义方法有两种:命名函数和匿名函数

2.9.2 命名函数
  • 格式:

    function 函数名(参数列表) {
        函数体代码;
        [return 返回值]
    }
    

示例:定义一个函数实现加法功能

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>两个数相加的函数</title>
</head>
<body>
<script type="text/javascript">
    //函数的定义
    function add(m,n) {
        return m+n;
    }

    //函数的调用
    document.write("两个数的和:" + add(5,3));
</script>
</body>
</html>
注意事项
  1. 形参的类型:在函数定义的时候不能指定形参类型,因为是可变类型

  2. 函数的返回值:不需要对返回值类型进行声明。如果一个函数中需要返回值,直接使用return返回,如果没有返回值,不写return。

  3. 关于函数的重载:在JS中没有函数的重载,同名的函数会覆盖原来的函数,调用的时候,只会调用最后1次定义的函数,而且实参的个数与形参数的个数没有关系。

  4. 在JavaScript中的任意的函数内部都隐式的维护了一个arguments对象(数组), 调用函数的时候实参是先传递给了arguments对象,然后再arguments对象分配形参的。

  5. 使用arguments对象时,不使用形参也一样可获取到用户传递的数据,但建议写上形参,以便于提示该函数需要传参,以及传入多少什么类型的参数。

2.9.3 匿名函数
  • 格式:

    var 变量名 = function(参数列表) {
    	函数体;
    }
    //调用
    变量名("数据");
    
2.9.4 函数变量的作用域
2.9.4.1 局部变量
  • 在函数内定义的变量,该变量在定义时必须不能省略var。
  • 作用域仅在该函数中
2.9.4.2 全局变量
  • 如果变量在定义的时候省略var值,那么该变量是全局变量,可作用于其他语句
  • 但注意:如果全局变量是在函数内定义,那么函数要被调用之后该变量才会被创建

2.10 补充常用的函数(后续会系统地讲)

  1. alert(“提示信息”)

    作用:弹出一个警示框

  2. document.write(“输出文字”)

    作用:在页面中输出文字

  3. window.prompt(“提示信息”,“默认值”)

    作用:弹出一个输入框,默认值可以省略

  4. window.setInterval(“需要调用的函数名()”,相隔的毫秒数)

    作用:定时器,每隔一定的时间调用一次函数

2.11 实现轮播图

需求:每隔2秒切换一张图片的效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>轮播图</title>
    <style type="text/css"></style>
    <script type="text/javascript">
        //设置定时器
        window.setInterval("changeImage()",2000);
        var num =1;	//在调用函数的时候0.jpg已经显示,如果num=0,那么在执行下面函数时,0.jpg会再次显示2秒
        //设置寻找图片的函数
        function changeImage() {
            var img = document.getElementById("img");//img对象就相当于img标签
            if (num < 5) {
                img.src = "img/" + num + ".jpg";
                num++;
            }else {
                num = 0;
                changeImage();
            }
        }
    </script>
</head>
<body>
    <img src="img/0.jpg" id="img" width="600px" height="400px"/>
</body>
</html>

3. JavaScript的事件

3.1 概念

  • 事件是可以被 JavaScript 侦测到的行为。当发生指定到事情到时候,会触发相应的处理方式。

注意:事件通常要与函数配合使用,当事件发生时函数才会执行

3.2 事件的注册方式

3.2.1 html元素内部注册
  • 在html标签中写事件,如:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css"></style>
    <script type="text/javascript">

        function setName(){
            window.prompt("请输入姓名");
        }

    </script>
</head>
<body>
    <!--html元素内部注册-->
    <input type="button"  value="按钮" onclick="setName()" />
</body>
</html>

  • 耦合度高,但使用较简单
3.2.2 使用js代码注册
  • 在script标签中编写,如:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件2</title>
    <style type="text/css"></style>
</head>
<body>
<input type="button" value="按钮" id="bt"/>
</body>
<script type="text/javascript">
    //找到按钮
    var button = document.getElementById("bt");
    //注册事件(使用匿名函数)
    button.onclick = function () {
        window.prompt("请输入姓名");
    }
</script>
</html>

但是这种写法

改进方案
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件2</title>
    <style type="text/css"></style>
    <script type="text/javascript">
        //加载完页面后再函数
        window.onload = function () {
            //找到按钮
            var button = document.getElementById("bt");
            //注册事件(使用匿名函数)
            button.onclick = function () {
                window.prompt("请输入姓名");
            }
        }

    </script>
</head>
<body>
<input type="button" value="按钮" id="bt"/>
</body>

</html>
3.3 常用的事件
属性描述
onblur元素失去焦点
onchange主要用于下拉框的内容改变, select
onclick鼠标点击某个对象
ondblclick鼠标双击某个对象
onfocus元素获得焦点
onkeydown某个键盘的键被按下
onkeyup某个键盘的键被松开
onload某个页面或图像被完成加载
onmousedown某个鼠标按键被按下
onmouseout鼠标从某元素移开
onmouseover鼠标被移到某元素之上
onmouseup某个鼠标按键被松开
onsubmit提交按钮被点击
注意事项
  1. 使用事件调用函数的格式有两种:

    第一种:

    /*1、在html标签中设置事件*/
    onclick="函数名()"
    /*2、然后在<script>标签中添加函数*/
    

    第二种:

    /*1、给html元素增加id属性*/
    /*2、在<script>标签中根据id属性找到该元素*/
    var button = document.getElementsById("元素ID值")
    /*然后用该元素对象添加函数*/
    button.onclick = function() {
        //函数体
    }
    
  2. onsubmit的用法比较特殊(重要)

    • 一个表单提交的时候会出发onsubmit事件。如果出发的事件返回的是true,那么表单允许提交;返回false则不允许表单提交;
    • 使用onsubmit必须有返回值,所以onsubmit事件调用的函数要return。如果是在html标签中设置onsubmit事件,必须写成onsubmit="return 函数名()"
3.4 示例案例代码

需求:

  1. 点按钮弹出一个信息框
    
  2. 双击图片,图片变成另一张。
    
  3. 文本框得到焦点,中间的文字消失。
    
  4. 下拉框内容发生变化的时候,得到当前选中的值,弹出信息框
    
  5. 页面加载完毕的时候弹出信息框
    
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>事件练习</title>
    <script type="text/javascript">

        //点按钮弹出一个信息框
        function testClick() {
            alert("不要点嘛,讨厌~");
        }

        //双击更换图片
        var num = 1;
        function changeImage(img) {
            if (num < 3) {
                num = parseInt(num) + 1;
                img.setAttribute("src", "img/"+ num + ".jpg");
            } else {
                num = 0;
                img.setAttribute("src", "img/"+ num + ".jpg");
            }
        }

        function clearText(input) {
            input.setAttribute("value",""); //也可以直接给value赋值:input.value = "";
        }
        function setData(input) {
            input.setAttribute("value","请输入用户名...");
        }

        //下拉框内容发生变化,得到当前选中的值并弹出信息框
        function changeTest(select) {
            /*var str = select.value;
            alert("你选择的是" + str);*/
            /*
            上述方法仅能输出value值,如果要输入选项内容可以用下面的方法
             */
            var index = document.getElementById("se").selectedIndex;    //获取当前选择中的选项的索引值
            var content = document.getElementById("se").options[index].innerHTML;    //根据索引值获得当前选项的标签文本,也可以用innerText
            alert("你选择的是" + content);
        }

        function ready() {
            alert("页面已经加载完成");
        }
    </script>
</head>
<body onload="ready()">
<input type="button" value="点我啊" onclick="testClick()"/><br/><br/>
<!-- this代表了当前的标签对象 -->
<img src="img/1.jpg" width="350px" ondblclick="changeImage(this)"/><br/><br/>

<input type="text" value="请输入用户名..." onfocus="clearText(this)" onblur="setData(this)"/><hr/>

省份:
<select id="se" onchange="changeTest(this)">
    <option value="bj">北京</option>
    <option value="sh">上海</option>
    <option value="gd">广东</option>
    <option value="hn">湖南</option>
</select> <br/>

<br/>
</body>
</html>
该案例涉及到的方法:
  1. selectedIndex:获得指定选择框当前选中的选项的索引值;
  2. options[index]:根据选项索引值获得对应的选项对象(注意有s);

4. JavaScript的内置对象

4.1 数组对象

  • 数组在JS中是一个类,通过构造方法创建对象。
4.1.1 创建数组的方式
创建数组的方式说明
new Array()无参的构造方法,指定数组的长度
[元素1,元素2…]使用中括号的方式创建数组

还有两种不常用

4.1.2 JS中数组的特点
  1. 数组中的每个元素的类型是可以不同的。

  2. 数组的长度可以动态变化

  3. 数组中包含大量的方法,类似于Java中的集合,而Java中的数组没有方法。

4.1.3 常用方法
方法名功能
concat()连接两个或更多的数组,并返回结果
reverse()将数组进行反转
join(separator)与split()功能相反,指定数组元素之间的分隔符,然后把数组的每一个元素与分隔符拼装一个字符串返回
sort()对字符串数组进行排序
如果要对数字进行排序,要指定比较器函数。
sort(function(m,n)) 数字两两比较
1) 如果m大于n,则返回正整数
2) 如果m小于n,则返回负整数
3) 如果m等于n,则返回0
示例代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数组</title>
    <style type="text/css"></style>
    <script type="text/javascript">

        var arr1 = [1,2,3,4,5];

        var arr2 = [6,7,8,9,10];

        //合并数组的元素
        var arr3 = arr1.concat(arr2);

        //翻转数组的元素
        arr3.reverse();

        //查看数组的元素
        var joinArr = arr3.join(",");
        document.write("arr3:"+ joinArr+"<br/>");


        var arr4 = [89,56,29,47,123];
        //比较的函数
        function compareNum(num1,num2){
            return num1-num2;
        }

        //排序
        arr4.sort(compareNum);
        document.write("arr4升序后:"+arr4.join(",") +"<br/>");
    </script>
</head>
<body>

</body>
</html>

4.2 日期对象

4.2.1 日期对象的创建

作用:Date 对象用于处理日期和时间。

创建 Date 对象的语法:
var myDate=new Date()

注:Date 对象会自动把当前日期和时间保存为其初始值。

4.2.2 日期对象的方法
  • 使用Date对象调用方法
方法名作用
getFullYear()从 Date 对象以四位数字返回年份。
getMonth()从 Date 对象返回月份 (0 ~ 11)。
getDate()从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getHours()返回 Date 对象的小时 (0 ~ 23)。
getMinutes()返回 Date 对象的分钟 (0 ~ 59)。
getSeconds()返回 Date 对象的秒数 (0 ~ 59)。
getMilliseconds()返回 Date 对象的毫秒(0 ~ 999)。
getTime()返回 1970 年 1 月 1 日至今的毫秒数。类似于Java中的System.currentTimeMillis()
toLocaleString()返回本地格式的字符串
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值