1. JavaScript介绍
JavaScript语言诞生主要是完成页面的数据验证。因此它运行在客户端 ,需要运行浏览器来解析执行JavaScript代码。
特点:
- 交互性(他可以做的就是信息的动态交互)
- 安全性(不允许直接访问本地硬盘)
- 跨平台性(只要是可以解释JS的浏览器都可以执行,和平台无关)
2. 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是JavaScript语言提供的一个警告框函数,它可以接收任意类型的参数,这个参数就是警告框的提示信息
alert("hello JavaScript");
</script>
</head>
<body>
</body>
</html>
2.2 第二种方式
使用script标签引入单独的JavaScript代码文件
html文件代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--
现在需要使用script引入外部的js文件来执行
src属性专门用来引入JS文件路径(可以是相对路径也可以是绝对路径)
script标签可以同来定义js代码,也可以用来引入js文件
但是,两个功能二选一使用,不能同时使用两个功能
-->
<script type="text/javascript" src="1.js"></script>
</head>
<body>
</body>
</html>
JS文件代码
alert("hello JavaScript");
3.变量
JS的变量类型:
数值类型: number
字符串类型: string
对象类型: object
布尔类型: boolean
函数类型: function
特殊变量值:
undefined 未定义,所有JS变量未赋予初始值的时候,默认值 都是undefined
null 空值
NAN 全称是:Not a Number,非数值。
JS中的定义变量格式:
var 变量名;
var 变量名 = 值;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>变量</title>
<script type="text/javascript">
var i;
alert(i); // undefined
i = 12;
// typeof是JavaScript提供的一个可以返回变量数据类型的函数
alert(typeof(i)); //number
var a = 12;
var b = "abc";
alert(a*b); //NAN
</script>
</head>
<body>
</body>
</html>
4.关系(比较)运算
等于: ==(是简单的做字面值的比较)
全等于: ===(除了做简单的字面值的 比较,还要比较数据类型)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>关系运算</title>
<script type="text/javascript">
var a = "12";
var b = 12;
alert(a==b); //ture
alert(a===b); //false
</script>
</head>
<body>
</body>
</html>
5.逻辑运算
-
且运算:&&
a. 当表达式全为真的时候 ,返回最后一个表达式的值。 b. 当表达式中,有一个为假时,返回第一个为假的表达式的值。
-
或运算:||
a. 当表达式全为假时,返回最后一个表达式的值 b. 当表达式中,只要有一个为真时,返回第一个为真的表达式的值
-
取反运算:!
并且&&与运算和||或运算有短路,即当这两种运算有结果之后,后面的表达式则不再执行。
在JavaScript中,所有的变量,都可以座位一个boolean类型的变量去使用
0、null、undefined、""(空串)都认为是false;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>逻辑运算</title>
<script type="text/javascript">
var i = 0;
if(i){
alert("0为真");
}else{
alert("0为假")
}
var a = "abc";
var b = true;
var d = false;
var c = null;
alert(a&&b); // true
alert(b&&a); // abc
alert(a&&d); //false
alert(c&&a); // null
alert(d||c); //null
alert(c||d); //false
alert(b||d); //true
alert(a||b); //abc
alert(b||a); //true
</script>
</head>
<body>
</body>
</html>
6.数组(重点)
- 数组的定义方式
格式:
var 数组名 = []; //空数组
var 数组名 = [‘1’,‘abc’,true]; // 定义数组同时赋值元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数组</title>
<script type="text/javascript">
// JavaScript语言中的数组,只要我们通过数组下标赋值,那么最大的下标值,就会自动的给数组做扩容操作。
var arr = []; //定义一个空数组
alert(arr.length); //0
arr[0] = 12;
alert(arr[0]); //12
alert(arr.length);//1
arr[3]="abc";
alert(arr.length); // 4
for (var i = 0 ;i < arr.length ; i++){
alert(arr[i]);
}
</script>
</head>
<body>
</body>
</html>
7.函数(重点)
法一:使用function关键字
function 函数名(形参列表){
函数体
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>函数定义</title>
<script type="text/javascript">
// 定义一个无参函数
function fun(){
alert("无参函数fun被调用了");
}
fun(); // 调用fun函数
// 定义一个有参函数
function fun2(a,b){
alert("有参函数fun2被调用了 a="+a+",b="+b);
}
fun2(10,12)
//定义带有返回值的函数
function sum(num1,num2){
return num1+num2;
}
alert(sum(200,200));
</script>
</head>
<body>
</body>
</html>
法二:
var 函数名 = function(形参列表){
函数体
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>函数定义</title>
<script type="text/javascript">
// 定义一个无参函数
function fun(){
alert("无参函数fun被调用了");
}
fun(); // 调用fun函数
// 定义一个有参函数
function fun2(a,b){
alert("有参函数fun2被调用了 a="+a+",b="+b);
}
fun2(10,12)
//定义带有返回值的函数
function sum(num1,num2){
return num1+num2;
}
alert(sum(200,200));
</script>
</head>
<body>
</body>
</html>
注:在Java中函数允许重载,但是在JS中函数的重载会直接覆盖掉上一次的定义
8.函数的arguments隐形参数(只在function函数体内)
就是在function函数中不需要定义,但却可以直接用来获取所有参数的变量。类似与Java中的可变长参数。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>隐形参数 </title>
<script type="text/javascript">
function fun(){
// arguments类似于数组
alert(arguments.length); // 可查看参数个数
alert(arguments[0]); // 1
alert(arguments[1]); // 2
}
fun(1,2);
// 需求:要求编写一个函数,用于计算所有参数的和并返回
function sum(){
var result = 0;
for (var i=0; i<arguments.length; i++){
result = result + arguments[i];
}
return result;
}
alert(sum(1,9,5,5,10) );
</script>
</head>
<body>
</body>
</html>
9.JS中的自定义对象
- Object形式的自定义对象
var 变量名 = new Object(); // 对象实例(空对象)
变量名.属性名 = 值; // 定义一个属性
变量名.函数名 = function(){} // 定义一个函数
对象的访问:
变量名.属性名/函数名();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Object</title>
<script type="text/javascript">
var obj = new Object();
obj.name = "www";
obj.age = 20;
obj.fun = function (){
alert("姓名:"+this.name+" ,年龄:"+this.age);
}
obj.fun();
</script>
</head>
<body>
</body>
</html>
- 花括号形式的自定义对象
var 变量名 = {}; //空对象
var 变量名 = {
属性名:值, // 定义一个属性,每个属性或函数之间用逗号分隔
属性名:值 , // 最后一个属性或函数 不加逗号
函数名:function(){} // 定义一个函数
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Obeject02</title>
<script type="text/javascript">
var obj = {
name: "www",
age: 18,
fun: function (){
alert("姓名:"+this.name+" ,年龄:"+this.age);
}
};
obj.fun();
</script>
</head>
<body>
</body>
</html>
10.JS中的事件
事件是指电脑的输入设备与页面进行交互的响应
10.1常见的事件:
a. onload加载完成事件
页面加载完成之后,常用于做页面js代码初始化操作
b. onclick单击事件
常用于按钮的点击响应操作
c. onblur失去焦点事件
常用于输入框失去焦点后验证其内容是否合法
d. onchange内容发生改变事件
常用于下拉列表和输入框内容发生改变后操作
e. onsubmit 表单提交事件
常用于表单提交前,检查表单是否合法
10.2事件的注册
事件的注册(绑定):告诉浏览器当事件响应后要执行哪些操作代码
a. 静态注册事件
通过html标签的事件属性,直接赋予事件响应后的代码
b. 动态注册事件
先通过js代码得到标签的dom对象,然后再通过dom.事件名=function(){}赋予事件响应后的代码
动态注册的基本步骤:
(1) 获取标签对象
(2)标签对象.事件名 = function(){}
a. onload事件(onload事件是浏览器解析完页面之后会自动触发的事件)
(1) 静态onload事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>静态onload事件</title>
<script type="text/javascript">
function onloadfun(){
alert('静态注册Onload事件所有的代码');
}
</script>
</head>
<!--
静态注册onload事件
onload事件是浏览器解析完页面之后会自动触发的事件
-->
<body onload=onloadfun()>
</body>
</html>
(2)动态onload事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>onload事件的动态注册</title>
<script type="text/javascript">
// onload事件的动态注册是固定写法
window.onload = function (){
alert("动态注册的onload事件");
}
</script>
</head>
<body>
</body>
</html>
b. onclick事件
(1)静态注册
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>onclick</title>
<script type="text/javascript">
function onclickFun(){
alert("静态注册onclick事件");
}
</script>
</head>
<body>
<button onclick="onclickFun();">按钮1</button> // 点击按钮调用函数onclickFun
<button>按钮2</button>
</body>
</html>
(2)动态注册
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>onclick</title>
<script type="text/javascript">
// 动态注册onclick事件
window.onload = function (){
// 1. 获取标签对象
/*
* document是JS语言提供的一个对象(整个页面)
*/
var obj = document.getElementById("btn"); // 通过id获取标签对象
// 2. 通过标签对象.事件名 = function(){}
btn.onclick = function (){
alert("动态注册的onclick事件")
}
}
</script>
</head>
<body>
<button id="btn">按钮</button>
</body>
</html>
c.onblur失去焦点事件
(1)静态注册
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>onblur</title>
<script type="text/javascript">
// 静态注册失去焦点事件
function onblurFun(){
// console是控制台对象,由JS提供用向项浏览器的控制器打印输出,用于测试使用
// log是打印的方法
console.log("静态注册失去焦点事件");
}
</script>
</head>
<body>
用户名:<input type="text" onblur="onblurFun()"><br/>
密码:<input type="text" onblur="onblurFun()"><br/>
</body>
</html>
(2)动态注册
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>onblur</title>
<script type="text/javascript">
// 动态注册onblur事件
window.onload = function (){
// 1.获取标签对象
var UserNameObj = document.getElementById("UserName");
var PasswordObj = document.getElementById("Password");
// 2.通过标签对象.事件名 = function(){}
UserNameObj.onblur = function (){
alert("动态注册失去焦点事件");
}
PasswordObj.onblur = function (){
alert("动态注册失去焦点事件");
}
}
</script>
</head>
<body>
用户名:<input type="text" id="UserName"><br/>
密码:<input type="text" id="Password"><br/>
</body>
</html>
d.onchange
(1)静态注册
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>onchange</title>
<script type="text/javascript">
function onchangeFun(){
alert("国籍 已经改变了");
}
</script>
</head>
<body>
国籍:
<select onchange="onchangeFun()">
<option>--国籍--</option>
<option>中国</option>
<option>澳大利亚</option>
</select>
</body>
</html>
(2)动态注册
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>onchange</title>
<script type="text/javascript">
window.onload = function (){
var selectObj = document.getElementById("select01");
selectObj.onchange = function (){
alert("国籍已经改变");
}
}
</script>
</head>
<body>
国籍:
<select id="select01">
<option>--国籍--</option>
<option>中国</option>
<option>澳大利亚</option>
</select>
</body>
</html>
e.onsubmit表单提交事件
(1)静态注册
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>onsubmit</title>
<script type="text/javascript">
function onsunbmitFun(){
// 发现不合法阻止提交
alert("静态注册表单提交事件不合法");
return false;
}
</script>
</head>
<body>
<form action="http://localhost:8080" method="get" onsubmit=" return onsunbmitFun()">
<input type="submit" value="静态注册"/>
</form>
</body>
</html>
(2)动态注册
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>onsubmit</title>
<script type="text/javascript">
window.onload = function (){
var submitobj = document.getElementById("01");
submitobj.onsubmit = function (){
// 发现不合法阻止提交
alert("动态注册表单提交事件不合法");
return false;
}
}
</script>
</head>
<body>
<form action="http://localhost:8080" method="get" id="01">
<input type="submit" value="动态注册"/>
</form>
</body>
</html>
11.DOM模型
DOM全称是Document Object Model,文档对象模型,就是把文档中的标签、属性、文本转换为对象来管理。
11.1Document对象
Document对象的理解:
- Document它管理了所有的HTML文档内容
- Document它是一种树结构文档,有层级关系
- 它让我们把所有的标签都对象化
- 我们可以通过Document访问所有的标签对象
11.2Document对象中的方法介绍
document.getElementById(“elementId”)
通过标签的id属性查找标签的dom对象
document.getElementsByName(“elementName”)
通过标签的name属性查找标签的dom对象
document.getElementsByTagName(“tagname”)
通过标签名查找标签dom对象,tagname就是标签名
document.createElement(“tagName”)
通过给定的标签名,创建一个标签对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
/*
* 需求:当用户点击了校验按钮,要获取输入框中的内容,然后验证其是否合法
* 验证法则是:必须由字母、数字、下划线组成,而且长度是5-12
* */
function onclickFun01(){
// 当我们要操作一个标签的时候,一定要先获取这个标签对象
var usernameobj = document.getElementById("username");
var usernameText = usernameobj.value;
// 如何验证字符串,是否符合某个规则需要使用正则表达式
var patt = /^\w{5,12}$/;
// test方法用于测试否个字符串是否符合规则
if(patt.test(usernameText)){
alert("用户名合法");
} else{
alert("用户名不合法");
}
}
</script>
</head>
<body>
用户名:<input type="text" id="username" >
<button onclick="onclickFun01()">校验</button>
</body>
</html>
12.正则表达式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>正则表达式</title>
<script type="text/javascript">
/*
* var patt = new RegExp("e");
* var patt = /e/;
* 上面两个语句的效果相同,写法不同,功能相同
*/
// 表示要求字符串中,是否包含字母e
var patt = new RegExp("e");
var str = "abcd";
var str01 = "abcde";
alert(patt.test(str)); // false
alert(patt.test(str01)); // true
// 表示包含字母a或b或c中的任意一个
var patt01 = /[abc]/;
var str02 = "12234";
alert(patt01.test(str)); // true
alert(patt01.test(str02)); //false
// 表示你包含a到z中的任意一个
var patt02 = /[a-z]/;
/*
* var patt = /[0-9]/; 表示包含数字中的任意一个
* var patt = /[A-Z]/; 表示包含大写字母中的任意一个
* var patt = /[adf]/; 表示给定集合内的任意字母
* var patt = /[^fjash]/; 表示给定结合外的人以字母
* 元字符\w用于查找单词字符,单词字符包括:a-z、A-Z、0-9以及下划线_
* var patt = /a+/; 表示字符串中至少包含一个a
* var patt = /a?/; 表示要求字符串是否包含0个或1个a
* var patt = [a{7}/; 表示要求字符串是否包含7个连续的a
* var patt = /a{3,5}/; 表示要求字符串至少包含3个连续的a,最多5个连续的a
* var patt = /a{3,}/; 表示至少包含3个连续的a
* var patt = /a$/; 表示要求字符串必须以a结尾
* var patt = /^a/; 表示要求字符串开头必须为a
* var patt = /\w/; \w元字符用于查找单词字符,单词字符包括:a-z、A-Z、0-9,以及下划线_
* \W表示\w以外的
* */
var patt03 = /a*/; // 表示要求字符串中至少包含0个或多个a 包含--》最小条件满足就停止检查
var str03 = "aaaa"
alert(patt03.test(str02)); // 0个a --》true
alert(patt03.test(str)); // 1个a --》true
alert(patt03.test(str03)); // 多个a--》true
/*
前面的量词都是最小匹配,
例如var patt = /[a{3,5}/; 只要满足最少有三个连续的a则都显示true
var patt = /^a{3,5}$/; 则表示要求从头到尾进行检测,则可以解决此问题
*/
</script>
</head>
<body>
</body>
</html>
13.两种常见的验证提示效果
法一:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
/*
* 需求:当用户点击了校验按钮,要获取输入框中的内容,然后验证其是否合法
* 验证法则是:必须由字母、数字、下划线组成,而且长度是5-12
* */
function onclickFun01(){
// 当我们要操作一个标签的时候,一定要先获取这个标签对象
var usernameobj = document.getElementById("username");
var usernameText = usernameobj.value;
// 如何验证字符串,是否符合某个规则需要使用正则表达式
var patt = /^\w{5,12}$/;
var usernameSpanobj = document.getElementById("usernameSpan");
// test方法用于测试否个字符串是否符合规则
if(patt.test(usernameText)){
// innerHTML表示起始标签和结束标签中的内容,这个属性可读可写
usernameSpanobj.innerHTML = "用户名合法";
} else{
usernameSpanobj.innerHTML = "用户名不合法";
}
}
</script>
</head>
<body>
用户名:<input type="text" id="username" >
<span id="usernameSpan" style="color: red"></span>
<button onclick="onclickFun01()">校验</button>
</body>
</html>
法二:再span标签中插入图片
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function onclickFun01(){
var usernameobj = document.getElementById("username");
var usernameText = usernameobj.value;
var patt = /^\w{5,12}$/;
var usernameSpanobj = document.getElementById("usernameSpan");
if(patt.test(usernameText)){
usernameSpanobj.innerHTML = "<img src='../imgs/right.png' width='15' height='15'>";
} else{
usernameSpanobj.innerHTML = "<img src='../imgs/wrong.png' width='15' height='15'>";
}
}
</script>
</head>
<body>
用户名:<input type="text" id="username" >
<span id="usernameSpan" style="color: red" ></span>
<button onclick="onclickFun01()">校验</button>
</body>
</html>