Day03 JavaScript入门
Day03 JavaScript入门
课前回顾
一、JavaScript基本介绍
1、JavaScript简介
JavaScript(简称JS),是一种具有函数优先的轻量级,解释型或即时编译型动态脚本语言,已经被广泛应用于Web应用开发,通常用来为网页添加各种各样的动态功能,为用户提供更流畅更美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身功能的。
JavaScript在发布之前的名称其实是LiveScript,在发布前夕,恰好遇到刚发布不久的Java语言大火。为了蹭一波热度,就改名为JavaScript。但是本质上这两种语言没有任何关系。
作用:JavaScript可以通过事件操作HTML元素、读写元素内容、验证和提交数据、校验浏览器信息等,同时JavaScript可以在HTML页面中添加动画效果,增强用户体验。
2、JavaScript组成
- ECMAScript:(ECMA标准)JS的基础语法部分(数据类型、变量、运算符、函数、方法、事件等)
- DOM:(Document Object Model)文档对象模型。通过HTMLDOM提供一组API接口,实现对页面元素的动态操作。document
- BOM:(Browser Object Model)浏览器对象模型,主要用来操作浏览器信息。window
3、JavaScript引入方式
JavaScript有三种引入方式,和CSS引入方式相似,分为行内式、内嵌式、外链式。下面我们来介绍一下这三种引入方式:
3.1、行内式
直接在HTML标签中编写JS代码
案例:
<input type="button" value="点我呀" onclick="alert('hello.js')" />
3.2、内嵌式
在HTML页面中通过script标签定义js代码,script标签可以写在HTML页面的任何部分。同时,一个HTML页面中,可以定义多个script标签。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
// JS code
</script>
</head>
<body>
<script type="text/javascript">
// JS code
</script>
</body>
<script type="text/javascript">
// JS code
</script>
</html>
3.3、外链式
外链式是单独定义脚本文件(*.js),再将这个脚本文件通过script标签的src属性引入到html页面中,一个页面中可以引入多个外部js文件。
<script src="url"></script>
<script src="path/fileName"></script>
注意:引用外部JS文件的script标签内不能再写自定义的JavaScript代码。
二、ECMAScript
1、注释
JavaScript中的注释只拥有单行注释和多行注释两种,用法和Java中的单行注释和多行注释一致。
语法:
//单行注释
/*
多行注释
*/
2、变量
由于JS是一种弱类型的语言,所以与Java语言声明变量的语法格式有区别,它使用var关键字来声明变量。而不指定具体的数据类型。并且使用var声明的变量可以存储任意数据类型。
语法:
var 变量名;
或者
var 变量名 = 值;
案例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
// 先声明后赋值
var age;
age = 20;
// 控制台输出
window.console.log(age);
// 弹窗输出
window.alert(age);
//存储其他类型的值
age = "张瑞丰";
//测试
alert(age);
</script>
</html>
3、数据类型
JS数据类型分为两大类型:基本数据类型 引用数据类型
3.1、基本数据类型
- Undefined:值只有一个undefined,当我们定义了一个变量没有赋值时,其默认值为undefined
- Number:数值类型,JS中无论是整数还是小数,统称为数字类型
- Boolean:布尔类型,其值只有true false
- String:字符串类型,赋值时可以使用单引号或者双引号
案例:
//undefined类型
var varUndefined;
console.log('varUndefined:' + varUndefined + ' >type:' + typeof(varUndefined));
//浮点数和整数
var varInt = 100;
var varFloat = 3.1415926;
console.log('varInt:' + varInt);
console.log('varFloat:' + varFloat);
//布尔类型
var varBoolean = true;
console.log('varBoolean:' + varBoolean);
//字符串类型
var varStringSingle = '千山鸟飞绝';
var varStringDouble = "万径人踪灭";
console.log(varStringSingle + varStringDouble);
注意:查看变量类型:typeof(变量名)
3.2、引用数据类型
- 数组:和java中的数组不同,JS中数组可以存储不同类型的元素。
//创建并且初始化数组:
var 数组名称 = [值1,值2,值3,值4]; //值可以是不同的数据类型
//创建并且初始化数组长度
var 数组名称 = new Array(len);
//创建并初始化一个二维数组
var 数组名称 = [[1,2],[3,4]];
//案例代码:
var arr = [1,'3',true,3.14]; //数组的创建
console.log(arr);
- 类:存储多个键值对,类似于Java中的类,无需使用new关键字创建。
//语法:
var 对象名 = {属性=值1,属性2=值2};
//案例代码:
var person = {age:18, name:"Gates"}; // 对象的创建
console.log(person);
- Null:只有一个取值null,undefined实际是null派生而来,因此在ECMAScript中将其列为等值,即
null==undefined为true
//空值
var varNull = null;
console.log('varNull:' + null + ' >type:' + typeof(varNull));
4、运算符
- 赋值运算符:
= += -= *= /=
- 算数运算符:
+ - * / % ++ --
- 关系运算符(比较运算符):
> < >= <= != == ===
- 逻辑运算符:
&& || !
- 三目(条件)运算符:
?:
注意:由于JavaScript是弱类型语言,所以使用==
比较时要求比较宽松,如果比较的是不同类型的元素。
例如:
var varInt = 18;
var varString = '18';
console.log(varInt == varString);//结果为true
console.log(varInt === varString);//结果为false
==和===的区别
1、当使用==比较时,如果数据类型不同,会进行类型转换,转换成相同的数据类型后在进行比较
2、当使用===时,如果数据类型不同,则直接返回false
3、undefined==null
为true,undefined===null
为false
5、分支结构
5.1、if分支
- 简单if结构
//语法:
if(表达式){
语句;
}
//案例代码:
<script type="text/javascript">
//创建成绩变量
var score = 59;
//if分支
if(score >= 60){
console.log("奖励一朵小红花");
}
//if结构
if(score < 60){
console.log("奖励一顿鞭挞");
}
</script>
- if...else结构
//语法:
if(表达式){
语句;
}else{
语句;
}
//案例代码:
<script type="text/javascript">
//使用if...else简化上述操作
if(score >= 60){
console.log("奖励一朵小红花");
}else{
console.log("奖励一顿鞭挞");
}
</script>
- if...else...else if...else结构
//语法:
if(表达式){
语句;
}else if(表达式){
语句;
}else{
语句;
}
//案例代码
<script type="text/javascript">
//if...else if ...else语句块
if(score >= 90){
console.log("奖励一台iPhone12 Pro Max 国行 非海南免税版");
}else if(score >= 80){
console.log("奖励一台AirPods2");
}else if(score >= 60){
console.log("成功逃脱鞭挞");
}else{
console.log("终究还是没有逃离鞭挞");
}
</script>
5.2、switch分支
//语法:
switch(表达式 | 变量){
case 常量:
语句; break;
case 常量:
语句;break;
default:
语句;
}
//案例:
<script type="text/javascript">
//创建星期变量
var day = 8;
//使用switch将数字1~7显示为星期1~星期天
switch(day){
case 1:
console.log("懵懂"); break;
case 2:
console.log("继续懵懂");break;
case 3:
console.log("黎明前的黑暗");break;
case 4:
console.log("黑暗马上就要过去");break;
case 5:
console.log("天亮了");break;
case 6:
case 7:
console.log("享受");break;
default:
console.log("这一天肯定是火星过的");
}
</script>
6、循环结构
JS中的循环结构与Java中类似,其中while循环,do-while循环以及for循环的普通用法与Java完全一样,增强for循环的使用会有所差异,下面我们演示一下JS中的增强for循环的使用。
<script type="text/javascript">
//创建一个数组
var brand = ['奥迪','宝马','奔驰','吉利'];
//使用普通循环获取数组元素
for(var i = 0; i < brand.length; i++){
console.log(brand[i]);
}
//使用增强for循环获取数组元素
for(var i in brand){
console.log(brand[i]);
}
</script>
总结:Java中的foreach获取的是每个元素,而JavaScript中获取的是元素下标,Java的foreach使用for(type variable : arr)
而JavaScript中使用for(var variable : arr)
7、函数
函数是具有特定功能的代码块,一般通过事件的触发来调用,类似于Java中的方法。
语法格式:
function 函数名([参数列表]){
函数体;
[return 返回值;]
}
案例代码:
<script type="text/javascript">
//声明无参数函数
function printInfo(){
console.log("打印张瑞丰的个人信息。");
}
//调用函数
printInfo();
//声明有参数函数
function eat(food){
console.log("你吃掉了:" + food);
}
//调用有参方法
eat('香蕉');
//创建有参数,有返回值的函数
function sum(num1,num2){
return num1 + num2;
}
//调用有参、有返回值的函数
var val = sum(99,1);
console.log("sum:" + val);
</script>
8、事件和事件绑定
事件是HTML4.0之后的新特性,通过浏览器页面中元素的一系列触发调用指定的一段JavaScript代码。
8.1、常见事件
属性 | 此事件发生在何时... |
---|---|
onabort | 图像的加载被中断。 |
onblur | 元素失去焦点。 |
onchange | 域的内容被改变。 |
onclick | 当用户点击某个对象时调用的事件句柄。 |
ondblclick | 当用户双击某个对象时调用的事件句柄。 |
onerror | 在加载文档或图像时发生错误。 |
onfocus | 元素获得焦点。 |
onkeydown | 某个键盘按键被按下。 |
onkeypress | 某个键盘按键被按下并松开。 |
onkeyup | 某个键盘按键被松开。 |
onload | 一张页面或一幅图像完成加载。 |
onmousedown | 鼠标按钮被按下。 |
onmousemove | 鼠标被移动。 |
onmouseout | 鼠标从某元素移开。 |
onmouseover | 鼠标移到某元素之上。 |
onmouseup | 鼠标按键被松开。 |
onreset | 重置按钮被点击。 |
onresize | 窗口或框架被重新调整大小。 |
onselect | 文本被选中。 |
onsubmit | 确认按钮被点击。 |
onunload | 用户退出页面。 |
8.2、事件绑定
事件绑定分为以下两种:
- 直接在标签中绑定
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<input type="button" id="btn" value="来吧,展示" onclick="show()" />
</body>
<script type="text/javascript">
//和事件绑定的函数
function show(){
alert("你点了我");
}
</script>
</html>
- 在JS脚本中获取要绑定事件的对象,通过代码绑定
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<input type="button" value="来吧,展示" onclick="show()" />
<input type="button" id="btn" value="通过js绑定" />
</body>
<script type="text/javascript">
//和事件绑定的函数
function show(){
alert("你点了我");
}
//绑定事件
document.getElementById("btn").onclick = show;
</script>
</html>
8.3、常见事件
8.3.1、焦点事件
- onfocus:获得焦点事件
- onblur:失去焦点事件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>常用事件</title>
</head>
<body>
<input id="username" type="text" onfocus="getFocus()" onblur="loseFocus()">
</body>
<script type="text/javascript">
//当获取焦点时触发的函数
function getFocus(){
console.log("文本框获取了焦点");
}
//当丢失了焦点时触发的函数
function loseFocus(){
console.log("焦点丢失了");
}
</script>
</html>
8.3.2、键盘事件
- onkeydown:键盘按下时
- onkeyup:键盘释放时
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>键盘事件</title>
</head>
<body>
<input type="text" onkeydown="keyDown()" onkeyup="keyUp()">
</body>
<script type="text/javascript">
//键盘按下事件
function keyDown(){
console.log("键盘已经按下了!");
}
//键盘抬起事件
function keyUp(){
console.log("键盘已经抬起了!");
}
</script>
</html>
8.3.3、鼠标事件
- onmouseover:鼠标经过
- onmouseout:鼠标离开
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>鼠标事件</title>
<style type="text/css">
#box{
width: 300px;
height: 300px;
border: solid black 1px;
background-color: skyblue;
}
</style>
</head>
<body>
<div id="box">
</div>
</body>
<script type="text/javascript">
//获取元素
var box = document.getElementById("box");
//绑定属性
box.onmousemove = function(){
box.style.backgroundColor = 'red';
console.log("鼠标移动到了div上");
}
box.onmouseout = function(){
box.style.backgroundColor = 'skyblue';
console.log("鼠标离开了div");
}
</script>
</html>
8.3.4、内容改变事件
- onchange:内容发生改变
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>值改变事件</title>
</head>
<body>
<input type="text" onchange="valChange()">
<select onchange="valChange()">
<option value ="上海">上海</option>
<option value ="成都">成都</option>
<option value ="北京">北京</option>
</select>
</body>
<script type="text/javascript">
//值改变时触发的事件
function valChange(){
console.log("值发生了改变");
}
</script>
</html>
三、DOM模型
1、DOM简介
DOM(Document Object Model)文档对象模型,是W3C组织推荐的一组操作标记语言的编程接口。通过这些接口可以访问和修改页面元素。
当网页加载时,浏览器会创建页面的文档对象模型(Document Object Model)
HTML模型是树形结构:
2、查找元素
方法名 | 说明 |
---|---|
document.getElementById('id') | 通过id属性的值获取元素 |
document.getElementsByName('name') | 通过name属性获取元素 |
document.getElementsByClassName('class') | 通过class属性获取元素 |
document.getElementsByTagName('tag') | 通过标签名称获取元素 |
除了ById以外,其余三个方法都是返回多个对象,以数组形式返回。
2.1、案例1:表单校验
使用document.getElementById()完成:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="" method="post" onsubmit="return validateData()">
<p>用户名:<input type="text" id="username"></p>
<p>密 码:<input type="text" id="password"></p>
<p><input type="submit" value="登录"></p>
</form>
</body>
<script type="text/javascript">
//校验表单
function validateData(){
//通过id获取表单元素
var username = document.getElementById('username').value;
var psssword = document.getElementById('password').value;
//校验
if(username == '' || username == null){
alert('请输入用户名');
return false;
}
if(psssword == '' || psssword == null){
alert('请输入密码');
return false;
}
return true;
}
</script>
</html>
2.2、案例2:全选 全不选
需求:根据全选按钮的状态修改下面子复选框的状态
案例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>全选 全不选</title>
</head>
<body>
<form action="">
<p>全选<input id="all" type="checkbox" onclick="selectAll()"></p>
<p>抽烟<input name="hobby" type="checkbox"></p>
<p>喝酒<input name="hobby" type="checkbox"></p>
<p>烫头<input name="hobby" type="checkbox"></p>
<p>按摩<input name="hobby" type="checkbox"></p>
</form>
</body>
<script type="text/javascript">
//全选事件
function selectAll(){
//获取全选按钮组件
var all = document.getElementById('all');
//获取所有子元素
var hobby = document.getElementsByName('hobby');
//迭代hobby
for (var index in hobby) {
hobby[index].checked = all.checked;
}
}
</script>
</html>
效果:
3、修改元素
接下来我们通过几个修改元素的案例来巩固一下今天的内容
3.1、改变元素文本内容
需求:点击页面中按钮,将上面的“百度”文本值修改为中公教育
案例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>修改元素文本值</title>
</head>
<body>
<div id="content">百度</div>
<button type="button" onclick="changeText()">修改div标签的值</button>
</body>
<script type="text/javascript">
//创建事件绑定方法
function changeText(){
//获取div元素
var content = document.getElementById('content');
//获取其文本元素
var text = content.innerText;
//alert(text);
//为其设置新的文本值
content.innerText = '中公教育';
}
</script>
</html>
3.2、修改元素的样式
需求:点击按钮时,修改div的样式(颜色、边框、大小)
案例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>修改元素的样式</title>
<style type="text/css">
#box{
width: 300px;
height: 300px;
background-color: blue;
}
</style>
</head>
<body>
<div id="box"></div>
<input type="button" onclick="changeStyle()" value="改变div的样式">
</body>
<script type="text/javascript">
//按钮单击事件绑定的函数
function changeStyle(){
//获取div元素
var box = document.getElementById('box');
//修改边框样式
box.style.border = 'solid 5px yellow';
//修改背景颜色
box.style.backgroundColor = 'red';
}
</script>
</html>
效果:
3.3、升级表单验证
需求:表单验证出现错误时,将提示信息显示在输入框后面。
案例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>升级版表单验证</title>
</head>
<body>
<form action="" method="post" onsubmit="return validateData()">
<p>
账号:<input id="uname" type="text">
<span id="uname_msg"></span>
</p>
<p>
密码:<input id="pwd" type="password">
<span id="pwd_msg"></span>
</p>
<p>
<input type="submit" value="登录">
</p>
</form>
</body>
<script type="text/javascript">
//提交表单前调用的函数
function validateData(){
//先获取用户名和密码元素
var uname = document.getElementById('uname');
var pwd = document.getElementById('pwd');
//再获取错误提示标签
var uname_msg = document.getElementById('uname_msg');
var pwd_msg = document.getElementById('pwd_msg');
//判断用户名和密码的内容是否为空
if(uname.value == "" || uname.value == null){
uname_msg.innerHTML = "<font color='red'>*账号不能为空</font>";
return false;
}
if(pwd.value == "" || pwd.value == null){
pwd_msg.innerHTML = "<font color='red'>*密码不能为空</font>";
return false;
}
return true;
}
</script>
</html>
注意点:使用innerHTML时,需要单引号和双引号一起使用,否则会导致报错!
3.4、innerHTML和innerText的区别
都可以用来获取标签中间的文本信息, innerText:获取或设置纯文本信息(无样式)innerHTML:获取或设置HTML信息(有样式)
案例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>innerHTML和innerText区别</title>
</head>
<body>
<div id="box1">
</div>
<div id="box2">
</div>
</body>
<script type="text/javascript">
//获取元素
var box1 = document.getElementById('box1');
var box2 = document.getElementById('box2');
//innerHTML
box1.innerHTML = '<font color="red">我是文本</font>';
//innerText
box2.innerText = '<font color="red">我是文本</font>';
</script>
</html>
效果: