一. 介绍
- JavaScript语言诞生主要是完成页面的数据验证, 因此它运行在客户端, 需要运行浏览器来解析执行JavaScript代码
- JS是弱类型, Java是强类型
- 特点
- 交互性(它可以做的就是信息的动态交互)
- 安全性(不允许直接访问本地硬盘)
- 跨平台性(只要是解释JS的浏览器都可以执行, 与平台无关)
二. JavaScript与HTML代码结合的方式
2.1 第一种方式
- 只需在head标签中, 或者在body标签中, 使用script标签来书写JavaScript代码
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script type="text/javascript"> |
| |
| |
| alert("hello JavaScript!") |
| </script> |
| </head> |
| <body> |
| |
| </body> |
| </html> |
2.2 第二种方式
- 使用script标签引入单独的JavaScript代码文件
| |
| alert("hello javascript") |
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| |
| |
| |
| |
| |
| <script type="text/javascript" src="1.js"></script> |
| <script type="text/javascript"> |
| alert("abc") |
| </script> |
| </head> |
| <body> |
| |
| </body> |
| </html> |
| |
三. 变量
- 什么是变量?
- js的变量类型
- 数值类型 number
- 字符串类型 string
- 对象类型 object
- 布尔类型 boolean
- 函数类型 function
- js里特殊的值:
- undefined 未定义,所有js变量未赋予初始值时, 都是undefined
- null 空值
- NAN 全称是 Not A Number 非数字,非数值
- js中定义变量格式
| <script type="text/javascript"> |
| var i; |
| |
| i = 12; |
| |
| |
| alert(i); |
| alert(typeof i) |
| i = "abc"; |
| alert(typeof i) |
| |
| var a = 12; |
| var b = "abc"; |
| alert(a*b); |
| |
| </script> |
四. 运算
4.1 关系(比较)运算
- 等于: == 等于是简单的做字面值的比较
- 全等于: === 除了字面值的比较之外, 还会比较两个变量的数据类型
| <script type="text/javascript"> |
| var a = "12"; |
| var b = 12; |
| alert(a == b); |
| alert(a === b); |
| </script> |
4.2 逻辑运算
- 与运算: &&
- 或运算: ||
- 取反运算: !
- 在js语言中, 所有的变量, 都可以作为一个boolean类型的变量去使用
- 0, null, undefined, ""(空串) 都认为是false
- && 与运算 有两种情况
- 当表达式全为真的时候, 返回最后一个表达式的值
- 当表达式中, 有一个为假的时候, 返回第一个为假的表达式的值
- || 或运算 也有两种情况
- 当表达式全为假的时候, 返回最后一个表达式的值
- 当表达式中, 有一个为真的时候, 返回第一个为真的表达式的值
- 与运算和或运算 有短路
- 短路就是当这个表达式有结果了以后, 后面的表达式不再执行
| <script type="text/javascript"> |
| var a = "abc"; |
| var b = true; |
| var c = false; |
| var d = null; |
| |
| |
| |
| |
| |
| alert(a && b); |
| alert(b && a); |
| alert(a && c); |
| alert(a && c); |
| alert(a && d && c) |
| |
| |
| |
| |
| |
| alert(c || d); |
| alert(a || c); |
| </script> |
五. 数组[重点]
5.1 数组定义方式
- js中数组的定义:
- 格式
- var 数组名 = []; //空数组
- var 数组名 = [1,'abc',true]; //定义数组同时赋值元素
| <script type="text/javascript"> |
| var arr = []; |
| |
| |
| arr[0] = 12; |
| |
| alert(arr.length) |
| |
| |
| arr[2] = 'abc'; |
| alert(arr[1]); |
| alert(arr.length); |
| |
| |
| for (var i = 0; i < arr.length; i++){ |
| alert(arr[i]); |
| } |
| </script> |
六. 函数[重点]
6.1 函数的两种定义方式
6.1.1 第一种: 使用function关键字来定义函数
- function 函数名(形参列表){
函数体
}
在js语言中, 如何定义带有返回值的函数?
只需在函数体内直接使用return语句返回值即可
| <script type="text/javascript"> |
| |
| function f() { |
| alert("无参函数f()被调用了") |
| } |
| |
| |
| |
| function f1(a,b) { |
| alert("有参函数f1()被调用了 a=>" + a + ",b=>" + b); |
| } |
| |
| |
| |
| function f2(num1,num2) { |
| return num1 + num2; |
| } |
| alert(f2(100,50)); |
| </script> |
6.1.2 第二种 var 函数名 = function(形参列表){函数体}
| <script type="text/javascript"> |
| var f = function () { |
| alert("无参函数"); |
| } |
| f(); |
| |
| var f2 = function (a,b) { |
| alert("有参函数a=" + a + ",b=" + b); |
| } |
| f2(1,"aaa"); |
| |
| var f3 = function (num1,num2) { |
| return num1 + num2; |
| } |
| alert(f3(1,5)); |
| </script> |
- 注: 在Java中允许重载, 但js中函数的重载会覆盖掉上一次的定义
| <script type="text/javascript"> |
| function f() { |
| alert("无参函数") |
| } |
| function f(a,b) { |
| alert("有参函数") |
| } |
| f(); |
| </script> |
6.2 函数的arguments隐形参数(只在function函数内)
- 就是在function函数中不需要定义, 但却可以直接用来获取所有参数的变量, 我们管它叫隐形参数
- js中的隐形参数类似于Java中的可变长参数
- public void fun(Object... args);
- 可变长参数其实是一个数组
| <title>隐形参数</title> |
| <script type="text/javascript"> |
| function f() { |
| |
| |
| |
| |
| for (var i = 0; i < arguments.length; i++) { |
| alert(arguments[i]); |
| } |
| alert("无参函数") |
| } |
| |
| |
| |
| function sum() { |
| var sum = 0; |
| for (var i = 0; i < arguments.length; i++) { |
| if (typeof arguments[i] == "number"){ |
| sum = sum + arguments[i]; |
| } |
| } |
| return sum; |
| } |
| alert(sum(1,2,3,4,"aaa",5)); |
| </script> |
七. js中的自定义对象[扩展内容]
7.1 Object形式的自定义对象
- 对象的定义:
- var 变量名 = new Object(); //对象实例(空对象)
- 变量名.属性名 = 值; //定义一个属性
- 变量名.函数名 = function(){} //定义一个函数
- 对象的访问:
| <script type="text/javascript"> |
| |
| |
| |
| |
| |
| |
| var obj = new Object(); |
| obj.name = "张三"; |
| obj.age = 18; |
| obj.fun = function () { |
| alert("姓名: " + this.name + ", 年龄: " + this.age); |
| } |
| |
| |
| |
| alert(obj.name); |
| alert(obj.age); |
| obj.fun(); |
| </script> |
7.2 {} 花括号形式的自定义对象
var 变量名 = { //空对象
属性名: 值, //定义一个属性
属性名: 值, //定义一个属性
函数名: function(){} //定义一个函数
};
变量名.属性/函数名();
| <script type="text/javascript"> |
| var obj = { |
| name: "张三", |
| age: 18, |
| fun: function () { |
| alert("姓名: " + this.name + ", 年龄: " + this.age); |
| } |
| }; |
| |
| alert(obj.name); |
| alert(obj.age); |
| obj.fun(); |
| </script> |
八. js中的事件
- 什么是事件?
- 事件是电脑输入设备与页面进行交互的响应. 我们称之为事件
- 常用的事件:
- onload 加载完成事件
- onclick 单击事件
- onblur 失去焦点事件
- onchange 内容发生改变事件
- onsubmit 表单提交事件
- 事件的注册又分为静态注册和动态注册两种:
- 什么是事件的注册(绑定)? 其实就是告诉浏览器, 当事件响应后要执行哪些操作代码, 叫事件注册或绑定
- 静态注册事件: 通过html标签的事件属性直接赋予事件响应后的代码
- 动态注册事件: 是指先通过js代码得到标签的dom对象, 然后再通过dom对象.事件名 = function(){} 这种形式赋予事件响应后的代码,动态注册基本步骤
- 获取标签对象
- 标签对象.事件名 = function(){}
8.1 onload事件
| <script type="text/javascript"> |
| function onloadFun() { |
| alert("静态注册onload事件,所有代码"); |
| } |
| |
| |
| window.onload = function () { |
| alert("动态注册的onload事件"); |
| } |
| </script> |
| |
| |
| |
| |
8.2 onclick事件
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script type="text/javascript"> |
| |
| function onclickFun() { |
| alert("静态注册的onclick事件"); |
| } |
| |
| |
| window.onclick = function () { |
| |
| |
| |
| var btnObj = document.getElementById("btn2"); |
| |
| btnObj.onclick = function () { |
| alert("动态注册的onclick事件"); |
| } |
| } |
| </script> |
| </head> |
| <body> |
| |
| <button onclick="onclickFun()">按钮1</button> |
| <button id="btn2">按钮2</button> |
| </body> |
| </html> |
8.3 onblur事件
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script type="text/javascript"> |
| |
| function onblurFun() { |
| |
| |
| console.log('onblur的静态注册事件'); |
| } |
| |
| |
| window.onblur = function () { |
| var pwdObj = document.getElementById("pwd"); |
| pwdObj.onblur = function () { |
| console.log("onblur的动态注册事件"); |
| } |
| } |
| </script> |
| </head> |
| <body> |
| <p>用户名: <input type="text" onblur="onblurFun()"></p> |
| <p>密码: <input type="text" id="pwd"></p> |
| </body> |
| </html> |
8.4 onchange事件
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script type="text/javascript"> |
| function onchangeFun() { |
| alert("英雄已选择完毕"); |
| } |
| |
| window.onchange = function () { |
| var selObj = document.getElementById("sel"); |
| selObj.onchange = function () { |
| alert("铭文已选择完毕") |
| } |
| } |
| |
| </script> |
| </head> |
| <body> |
| <p>请选择你的出场英雄: </p> |
| <select onchange="onchangeFun()"> |
| <option>孙斌</option> |
| <option>廉颇</option> |
| <option>诸葛亮</option> |
| <option>李白</option> |
| <option>马可波罗</option> |
| </select> |
| <p>请选择你的铭文: </p> |
| <select id="sel"> |
| <option>通用</option> |
| <option>坦克</option> |
| <option>法穿</option> |
| <option>百穿</option> |
| <option>攻速</option> |
| </select> |
| </body> |
| </html> |
8.5 onsubmit事件
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script type="text/javascript"> |
| |
| function onsubmitFun() { |
| alert("onsubmit静态注册---发现不合法"); |
| return false; |
| } |
| |
| window.onsubmit = function () { |
| var formObj = document.getElementById("form"); |
| formObj.onsubmit = function () { |
| alert("onsubmit动态注册---发现不合法"); |
| return false; |
| } |
| } |
| </script> |
| </head> |
| <body> |
| |
| <form action="http://localhost:8080" method="get" onsubmit="return onsubmitFun()"> |
| <input type="submit" value="静态注册"> |
| </form> |
| <form action="http://localhost:8080" id="form"> |
| <input type="submit" value="动态注册"> |
| </form> |
| </body> |
| </html> |
九. DOM模型
- DOM全称是Document Object Model 文档对象模型
- 其实就是把文档中的标签, 属性, 文本, 转换成对象来管理, 我们主要学习它们是如何转换的
9.1 Document对象[重点]
- Document对象的理解
- 第一点: Document它管理了所有的HTML文档的内容
- 第二点: Document它是一种树结构的文档. 有层级关系
- 第三点: 它让我们把所有的标签都对象化
- 第四点: 我们可以通过document访问所有的标签对象
9.2 Document对象中的方法介绍[重点]
- document.getElementById(elementId)
- 通过标签的id属性查找标签的dom对象, elementId是标签的id属性值
- document.getElementByName(elementName)
- 通过标签的name属性查找标签的dom对象, elementId是标签的name属性值
- document.getElementByTagName(tagName)
- 通过标签名查找标签的dom对象, tagName是标签名
- document.createElement(tagName)
- 通过给定的标签名, 创建一个标签对象, tagName是要创建的标签名
9.2.1 getElementById
- 根据元素标签id属性得到某元素标签
- 示例: 校验输入的用户名是否合法
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script type="text/javascript"> |
| function onclickFun() { |
| var username = document.getElementById("username"); |
| var usernameText = username.value; |
| var reg = /^\w{5,12}$/; |
| if (reg.test(usernameText)){ |
| alert("用户名合法"); |
| }else { |
| alert("用户名不合法"); |
| } |
| } |
| </script> |
| </head> |
| <body> |
| |
| |
| |
| <p>用户名: <input type="text" id="username"></p> |
| <button onclick="onclickFun()">校验</button> |
| </body> |
| </html> |
9.2.2 正则表达式
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>正则</title> |
| <script type="text/javascript"> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| var pattern = /^\w{5,12}$/; |
| alert(pattern); |
| var str = "aaa1231231231"; |
| alert(pattern.test(str)); |
| </script> |
| </head> |
| <body> |
| |
| </body> |
| </html> |
9.2.3 两种常见的校验提示
- innerHTML 表示起始标签和结束标签中的内容
- 第一种: 文字提示, innerHTML 后写上想要显示的文字
- usernameSpanObj.innerHTML = "用户名合法";
- 第二种: 图片提示,, innerHTML 后写上要显示的图片位置
- usernameSpanObj.innerHTML = "
";
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script type="text/javascript"> |
| function onclickFun() { |
| var username = document.getElementById("username"); |
| var usernameText = username.value; |
| var reg = /^\w{5,12}$/; |
| var usernameSpanObj = document.getElementById("usernameSpan"); |
| |
| |
| |
| if (reg.test(usernameText)){ |
| usernameSpanObj.innerHTML = "用户名合法"; |
| |
| }else { |
| usernameSpanObj.innerHTML = "用户名不合法"; |
| |
| } |
| } |
| </script> |
| </head> |
| <body> |
| |
| |
| |
| <p>用户名: <input type="text" id="username"> |
| <span id="usernameSpan" style="color: red"></span> |
| </p> |
| |
| <button onclick="onclickFun()">校验</button> |
| </body> |
| </html> |
| |
9.2.4 getElementsByName
- 根据元素标签name属性得到元素标签集合
- 示例: 选择框全选,全不选, 反选
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script type="text/javascript"> |
| |
| function checkAll() { |
| |
| |
| |
| |
| var hobbies = document.getElementsByName("hobby"); |
| |
| |
| for (var i = 0; i < hobbies.length; i++) { |
| hobbies[i].checked = true; |
| } |
| } |
| |
| function checkNo() { |
| var hobbies = document.getElementsByName("hobby"); |
| for (var i = 0; i < hobbies.length; i++) { |
| hobbies[i].checked = false; |
| } |
| } |
| |
| function checkReverse() { |
| var hobbies = document.getElementsByName("hobby"); |
| for (var i = 0; i < hobbies.length; i++) { |
| hobbies[i].checked = !hobbies[i].checked; |
| |
| |
| |
| |
| |
| } |
| } |
| </script> |
| |
| </head> |
| <body> |
| 兴趣爱好: |
| <input type="checkbox" name="hobby" value="cpp" checked="checked">C++ |
| <input type="checkbox" name="hobby" value="java">Java |
| <input type="checkbox" name="hobby" value="js">JavaScript |
| <br/> |
| <button onclick="checkAll()">全选</button> |
| <button onclick="checkNo()">全不选</button> |
| <button onclick="checkReverse()">反选</button> |
| </body> |
| </html> |
| |
9.2.5 getElementsByTagName
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script type="text/javascript"> |
| |
| function checkAll() { |
| |
| |
| |
| |
| var inputs = document.getElementsByTagName("input"); |
| for (var i = 0; i < inputs.length; i++) { |
| inputs[i].checked = true; |
| } |
| } |
| </script> |
| |
| </head> |
| <body> |
| 兴趣爱好: |
| <input type="checkbox" value="cpp" checked="checked">C++ |
| <input type="checkbox" value="java">Java |
| <input type="checkbox" value="js">JavaScript |
| <br/> |
| <button onclick="checkAll()">全选</button> |
| </body> |
| </html> |
9.2.6 document对象的三个查询方法总结
- document对象的三个查询方法
- 如果标签中有id属性,优先使用getElementById方法来进行查询
- 如果标签中没有有id属性,有name属性, 则优先使用getElementByName方法来进行查询
- 如果标签中没有有id和name属性,那么使用getElementsByTagName方法来进行查询
- 以上三个查询方法, 一定要在页面加载完成后执行, 才能查询到标签对象
9.3 节点的常用属性和方法
- 节点就是标签对象
- 方法
- getElementsByTagName(): 获取当前节点的指定标签名孩子节点
- appendChild(oChildNode): 可以添加一个子节点, oChildNode是要添加的孩子节点
- 属性:
- childNodes: 获取当前节点的所有子节点
- firstChild: 获取当前节点的第一个子节点
- lastChild: 获取当前节点的最后一个子节点
- parentNode: 获取当前节点的父节点
- nextSibling: 获取当前节点的下一个节点
- previousSibling: 获取当前节点的上一个节点
- className: 用于获取或设置标签的class属性值
- innerHTML: 表示获取或设置起始标签和结束标签中的内容
- innerText: 表示获取或设置起始标签和结束标签中的文本
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script type="text/javascript"> |
| |
| |
| window.onload = function () { |
| var divObj = document.createElement("div"); |
| divObj.innerHTML = "JavaScript 很牛"; |
| document.body.appendChild(divObj); |
| } |
| </script> |
| </head> |
| <body> |
| |
| </body> |
| </html> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步