1. 入门
1.1 JavaScript介绍
- JavaScript是一种客户端脚本语言,运行在客户端浏览器中,每一个浏览器都具备解析JavaScript的引擎
- 脚本语言:不需要编译,就可以被浏览器直接解析执行了
- 核心功能就是增强用户和HTML页面的交互过程,让页面有一些动态效果,以次来增强用户的体验
- 1995年,NetScape(网景)公司,开发的一门客户端脚本语言:LiveScript,后来,请SUN公司的专家来进行修改,后命名为:JavaScript
- 1996年,微软抄袭JavaSpript开发出JScript脚本语言
- 1997年,ECMA(欧洲计算机制造商协会),制定出客户端脚本语言的标准:ECMAScript,统一了所有客户端脚本语言的编码方式
1.2 组成部分
- ECMAScript
- JavaScript的核心,描述了语言的基本语法(var、for、if、array等)和数据类型(数字、字符串、布尔、函数、对象(obj、[]、{}、null)、未定义),ECMAScript是一套标准,定义了一种语言(比如JS)是什么样子。
- DOM(文档对象模型)
- HTML 和 XML 的应用程序接口(API)。DOM 将把整个页面规划成由节点层级构成的文档。HTML 或 XML 页面的每个部分都是一个节点的衍生物。
- BOM(浏览器对象模型)
- 对浏览器窗口进行访问和操作
1.3 基本使用
- 内部方式
- 创建一个HTML
- 在
<body>
标签下面编写一个<script>
标签 - 在
<script>
标签中编写代码 - 通过浏览器查看
<script>
document.getElementById("btn").onclick=function () {
alert("点我干嘛?");
}
</script>
- 外部方式
- 定义独立的js文件,将代码编写在文件中
document.getElementById("btn").onclick=function () {
alert("点我干嘛?");
}
- 在HTML文件的
<body>
标签下通过<script src=js文件路径>
来引入js文件
- 例:
<script src="js/my.js"></script>
注意
- 在引入外部js的script标签中不能写其他的js代码了
- script标签必须有结束标签,不能是自闭合标签
1.4 开发环境搭建
- Node.js:JavaScript运行环境
- 傻瓜式安装,下一步即可
- 安装完成之后,打开dos命令符窗口,输入
node -v
,出现npm的版本信息则说明安装成功
- VSCode:编写前端技术的开发工具
- 傻瓜式安装,下一步即可
2. 基本语法
2.1 注释
- 单行注释
//注释的内容
- 多行注释
/* 注释的内容 */
2.2 输入输出语句
- 输入框
prompt("提示内容")
- 弹出警告框
alert("提示内容")
- 控制台输出
console.log("显示内容")
- 页面内容输出
document.write("显示内容")
2.3 变量和常量
- JavaScript属于弱类型的语言,定义变量时不区分具体的数据类型
- 定义局部变量
let变量名=值;
- 定义全局变量
变量名=值;
- 定义常量
const常量名=值;
2.4 数据类型
- 数据类型分为
- 原始数据类型(基本数据类型)
- 扩展数据类型(引用数据类型)
原始数据类型 | 说明 |
boolean | 布尔类型,true或false |
null | 声明null值的特殊关键字 |
undefined | 代表变量未定义 |
number | 整数或浮点数 |
string | 字符串 |
bigint | 大整数,例如:let num=10n; |
- Typeof方法
- 用于判断变量的数据类型
let age = 18;
document.write(typeof(age)); // number
2.5 运算符
- 算术运算符
运算符 | 说明 |
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 取余数 |
++ | 自增 |
– | 自减 |
- 赋值运算符
运算符 | 说明 |
= | 将等号右边的值赋值给等号左边的变量 |
+= | 相加后赋值 |
-= | 相减后赋值 |
*= | 相乘后赋值 |
/= | 相除后赋值 |
%= | 取余数后赋值 |
- 比较运算符
运算符 | 说明 |
== | 判断值是否相等 |
=== | 判断数据类型和值是否相等 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
!= | 不等于 |
- 逻辑运算符
运算符 | 说明 |
| 逻辑与,并且的功能 |
| 逻辑或,或者的功能 |
| 取反 |
- 三元运算符
- 格式
(比较表达式)?表达式1:表达式2;
- 执行流程
- 如果比较表达式为true,则取表达式1
- 如果比较表达式为false,则取表达式2
2.6 流程控制和循环语句
- if语句
let month = 3;
if(month >= 3 && month <= 5) {
document.write("春季");
}else if(month >= 6 && month <= 8) {
document.write("夏季");
}else if(month >= 9 && month <= 11) {
document.write("秋季");
}else if(month == 12 || month == 1 || month == 2) {
document.write("冬季");
}else {
document.write("月份有误");
}
document.write("<br>");
- switch语句
switch(month){
case 3:
case 4:
case 5:
document.write("春季");
break;
case 6:
case 7:
case 8:
document.write("夏季");
break;
case 9:
case 10:
case 11:
document.write("秋季");
break;
case 12:
case 1:
case 2:
document.write("冬季");
break;
default:
document.write("月份有误");
break;
}
document.write("<br>");
- for语句
for(let i = 1; i <= 5; i++) {
document.write(i + "<br>");
}
- while语句
let n = 6;
while(n <= 10) {
document.write(n + "<br>");
n++;
}
2.7 数组
- 数组的使用和java中的数组基本一致,但是在JavaScript中的数组更加灵活,数据类型和长度都没有限制
- 定义格式
let 数组名 = [元素1,元素2...];
let 数组名 = new Array();
- 添加元素
数组名[索引] = 值;
数组名.push(元素);
- 索引范围
- 从0开始,最大到数组长度-1
- 数组长度
- 数组名.length
- 数组高级运算符…
- 数组复制
- 合并数组
- 字符串转数组
2.8 函数
- 函数类似于java中的方法,可以将一些代码进行抽取,达到复用的效果
- 定义格式
function 方法名(参数列表){
方法体;
return 返回值;
}
- 可变参数
function 方法名(...参数名){
方法体;
return 返回值;
}
- 匿名函数
function(参数列表){
方法体;
}
注意
- 函数不调用就不会执行
- js中的函数没有重载的概念,只有覆盖的概念
- 在调用方法时,只判断函数名,和参数没有关系
3. DOM
3.1 介绍
- DOM(Document Object Model):文档对象模型
- 将HTML文档的各个组成部分,封装为对象,借助这些对象,可以对HTML文档进行增删改查的动态操作
3.2 Element元素的操作
方法名 | 说明 |
getElementById(id属性值) | 根据id获得一个元素 |
getElementsByTagName(标签名称) | 根据标签名称获得多个元素 |
getElementsByName(name属性值) | 根据name属性获得多个元素 |
getElementsByClassName(class属性值) | 根据class属性获得多个元素 |
子元素对象.parentElement属性 | 获取当前元素的父元素 |
createElement(标签名) | 创建一个新元素 |
appendChild(子元素) | 将指定子元素添加到父元素中 |
removeChild(子元素) | 用父元素删除指定子元素 |
replaceChild(新元素,旧元素) | 用新元素替换子元素 |
3.3 Attribute属性的操作
方法名 | 说明 |
setAttribute(属性名,属性值) | 设置属性 |
getAttribute(属性名) | 根据属性名获取属性值 |
removeAttribute(属性名) | 根据属性名移除指定的属性 |
style属性 | 为元素添加样式 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>属性的操作</title>
<style>
.aColor{
color: blue;
}
</style>
</head>
<body>
<a>点我呀</a>
</body>
<script>
//1. setAttribute() 添加属性
let a = document.getElementsByTagName("a")[0];
a.setAttribute("href","https://www.baidu.com");
//2. getAttribute() 获取属性
let value = a.getAttribute("href");
//alert(value);
//3. removeAttribute() 删除属性
//a.removeAttribute("href");
//4. style属性 添加样式
//a.style.color = "red";
//5. className属性 添加指定样式
a.className = "aColor";
</script>
</html>
3.4 Text文本的操作
属性名 | 说明 |
innerText | 添加文本内容,不解析标签 |
innerHTML | 添加文本内容,解析标签 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>文本的操作</title>
</head>
<body>
<div id="div"></div>
</body>
<script>
//1. innerText 添加文本内容,不解析标签
let div = document.getElementById("div");
div.innerText = "我是div";
//div.innerText = "<b>我是div</b>";
//2. innerHTML 添加文本内容,解析标签
div.innerHTML = "<b>我是div</b>";
</script>
</html>
4. 事件
4.1 介绍
- 事件指的就是当某些组件执行了某些操作后,会触发某些代码的执行
4.2 常用的事件
事件名 | 说明 |
onload | 某个页面或图像被完成加载 |
onsubmit | 当表单提交时触发该事件 |
onclick | 鼠标单击事件 |
ondblclick | 鼠标双击事件 |
onblur | 元素失去焦点 |
onfocus | 元素获得焦点 |
onchange | 用户改变域的内容 |
4.3 了解的事件
事件名 | 说明 |
onkeydown | 某个键盘的键被按下 |
onkeypress | 某个键盘的键被按下或按住 |
onkeyup | 某个键盘的键被松开 |
onmousedown | 某个鼠标按键被按下 |
onmouseup | 某个鼠标按键被松开 |
onmouseover | 鼠标被移到某元素之上 |
onmouseout | 鼠标从某元素移开 |
4.4 绑定事件
- 方式一
- 通过标签中的事件属性进行绑定
<button id="btn" onclick="执行的功能"></button>
- 方式二
- 通过DOM元素属性绑定
document.getElementById("btn").onclick = 执行的功能
5. 自定义对象
5.1 介绍
- 在JavaScript中同样也有面向对象,思想与Java中的类似
5.2 定义和使用对象
- 定义对象格式
class 类名{
constructor(变量列表){
变量赋值;
}
方法名(参数列表){
方法体;
return 返回值;
}
}
- 使用类的格式
let 对象名 = new 类名(实际变量值);
对象名.方法名();
5.3 字面量定义类和使用
- 定义格式
let 对象名 = {
变量名 : 变量值,
变量名 : 变量值,
...
方法名 : function(参数列表){
方法体;
return 返回值;
},
...
};
- 使用格式
对象名.变量名
对象名.方法名(实际参数);
5.4 继承
- 继承
- 让类与类产生子父类的关系,子类可以使用父类有权限的成员
- 继承关键字
extends
- 顶级父类
Object
6. 基本对象
6.1 Number
方法名 | 说明 |
parseFloat() | 将传入的字符串浮点数转为浮点数 |
parseInt() | 将传入的字符串整数转为整数 |
isNaN() | 判断传入的值是不是NaN |
- NaN
- not a number :不是一个数字,非数字的类型
6.2 Math
方法名 | 说明 |
ceil() | 向上取整 |
floor(x) | 向下取整 |
round(x) | 把数四舍五入为最接近的整数 |
random() | 随机数,返回的是0.0-1.0之间范围(含头不含尾) |
pow(x,y) | 幂运算,x的y次方 |
6.3 Date
- 构造方法
构造方法 | 说明 |
Date() | 根据当前时间创建对象 |
Date(value) | 根据指定毫秒值创建对象 |
Date(year,month,[day,hours,minutes,seconds,milliseconds]) | 根据指定字段创建对象(月份是0-11) |
- 成员方法
成员方法 | 说明 |
getFullYear() | 获取年份 |
getMonth() | 获取月份 |
getDate() | 获取天数 |
getHours() | 获取小时 |
getMinutes() | 获取分钟 |
getSeconds() | 获取秒数 |
getTime() | 返回从1970年1月1日至今的毫秒数 |
toLocaleString() | 返回本地日期格式的字符串 |
6.4 String
- 构造方法
构造方法 | 说明 |
String(value) | 根据指定字符串创建对象 |
let s = “字符串” | 直接赋值 |
- 成员方法
成员方法 | 说明 |
length属性 | 获取字符串长度 |
charAt(index) | 获取指定索引处的字符 |
indexOf(value) | 获取指定字符串出现的索引位置,找不到为-1 |
substring(start,end) | 根据指定索引范围截取字符串(含头不含尾) |
split(value) | 根据指定规则切割字符串,返回数组 |
replace(old,new) | 使用新字符串替代老字符串 |
6.5 RegExp(正则对象)
- 正则表达式
- 是一种对字符串进行匹配的规则
- 构造方法
构造方法 | 说明 |
RegExp(规则) | 根据指定规则创建对象 |
let reg = /^规则$/ | 直接赋值 |
- 成员方法
成员方法 | 说明 |
test(匹配的字符串) | 根据指定规则验证字符串是否符合 |
- 规则
表达式 | 说明 |
[a] | 只能是a |
[abc] | 只能是abc中的某一个 |
[1] | 只能是1 |
[123] | 只能是123中的某一个 |
[a-z] | 可以是a到z中的某一个 |
[A-Z] | 可以是A到Z中的某一个 |
[0-9] | 可以是0到9中的某一个 |
- 数量词
表达式 | 说明 |
* | 0次或者多次 |
+ | 1次或者多次 |
? | 0次或者一次 |
{m} | m次 |
{m,n} | 至少m次,最多n次 |
{m,} | 至少m次 |
{,n} | 最多n次 |
- 预定义字符
表达式 | 说明 |
\d | 单个数字字符[0-9] |
\w | 单个单词字符[a-zA-Z_0-9] |
\s | 单个空白字符 |
- 示例代码
<script>
//1,验证手机号
//规则:第一位1,第二位358,第三到十一位必须是数字,总长度11
let reg1 = /^[1][358][0-9]{9}$/;
document.write(reg1.test("18688888888")+"<br/>");
//2,验证用户名
//规则:字母、数字、下划线组成,总长度4-16
let reg2 = /^[a-zA-Z_0-9]{4,16}$/;
document.write(reg2.test("zhangsan"));
</script>
6.6 Array
成员方法 | 说明 |
push(元素) | 添加元素到数组的末尾 |
pop() | 删除数组末尾的元素 |
shift() | 删除数组最前面的元素 |
includes(元素) | 判断数组是否包含给定的值 |
reverse() | 反转数组中的元素 |
sort() | 对数组元素进行排序 |
6.7 Set
- JavaScript中的Set集合,元素唯一,存取顺序一致
- 构造方法
构造方法 | 说明 |
Set() | 创建Set集合对象 |
- 成员方法
成员方法 | 说明 |
add(元素) | 向集合中添加元素 |
size属性 | 获取集合长度 |
keys() | 获取迭代器对象 |
delete(元素) | 删除指定元素 |
6.8 Map
- JavaScript中的Map集合,key唯一,存取顺序一致
- 构造方法
构造方法 | 说明 |
Map() | 创建Map集合对象 |
- 成员方法
成员方法 | 说明 |
set(key,value) | 向集合中添加元素 |
size属性 | 获取集合长度 |
get(key) | 根据key获取value |
entries() | 获取迭代器对象 |
delete(key) | 根据key删除键值对 |
6.9 JSON
- JSON(JavaScript Object Notation):是一种轻量级的数据交换格式
- 它是基于ECMAScript规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据
- 简洁和清晰的层次结构使得JSON成为理想的数据交换语言,易于人阅读和编写,同时也易于计算机解析和生成,并有效的提升网络传输效率
- 常用方法
成员方法 | 说明 |
strinngify(对象) | 将指定对象转换为json格式的字符串 |
parse(字符串) | 将指定json格式的字符串解析成对象 |
- 代码示例
<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>
注意
- 所有的键必须使用双引号括起来
- 所有的值如果是数字类型则可以不加双引号
7. 表单校验案例
- 步骤分析
- 为表单绑定提交事件
- 获取填写的用户名和密码
- 判断用户名是否符合规则
- 判断密码是否符合规则
- 如果有一个条件不符合,则弹出提示消息,重新输入
- 如果所有的条件都满足,则提交表单
- 代码实现
<body>
<div class="login-form-wrap">
<h1>注册页面</h1>
<form class="login-form" action="#" id="regist" method="get" autocomplete="off">
<label>
<input type="text" id="username" name="username" placeholder="Username..." value="">
</label>
<label>
<input type="password" id="password" name="password" placeholder="Password..." value="">
</label>
<input type="submit" value="注册">
</form>
</div>
</body>
<script>
document.getElementById("regist").onsubmit = function(){
let username = document.getElementById("username").value;
let password = document.getElementById("password").value;
let reg1 = /^[a-zA-Z]{4,16}$/;
if(!reg1.test(username)){
alert("用户名不符合,请输入4到16为纯字母");
return false;
}
let reg2 = /^[0-9]{6}$/;
if(!reg2.test(password)){
alert("密码不符合,请输入6位数字密码");
return false;
}
return true;
}
</script>
8. BOM
8.1 介绍
- BOM(Browser Object Model)
- 浏览器对象模型
- 将浏览器的各个组成部分封装成不同的对象,方便我们进行操作
- Navigator:浏览器对象
- Window:窗口对象
- Location:地址栏对象
- History:历史记录对象
- Screen:显示器屏幕对象
8.2 Window窗口对象
- 定时器
- 一次性定时器
- 唯一标识setTimeout(功能,毫秒值):设置一次性定时器
- clearTimeout(标识):取消一次性定时器
- 循环定时器
- 唯一标识setInterval(功能,毫秒值):设置循环定时器
- clearInterval(标识):取消循环定时器
- 加载事件
- window.onload:在页面加载完毕后触发此事件的功能
8.3 Location地址栏对象
- href属性
- 就是浏览器的地址栏,我们可以通过为该属性设置新的URL,使浏览器读取并显示新的URL的内容
- 模拟注册成功后的跳转
<body>
<p>
注册成功!<span id="time">5</span>秒之后自动跳转到首页
</p>
</body>
<script>
let num = 5;
function showTime(){
num--;
if(num <= 0){
location.href = "跳转页面地址";
}
let span = document.getElementById("time");
span.innerHTML = num;
}
//设置循环定时器,每一秒执行一次showTime方法
setInterval("showTime()",1000);
</script>