前言
JavaScript是用来实现页面交互的一门编程语言。

JavaScript的核心逻辑:使用ECMA Script核心语法,通过BOM对象下的Window对象提供的API,查找并操作HTML中的标签、属性和CSS样式。
-
-
动手:有目标就去做,网景公司大牛多,Brendan Eich(布兰登·艾奇)据说就用了10天就把JavaScript搞了出来,刚出来时叫LiveScript,为了蹭蹭当红明星Java热度,就改成JavaScript了(瞬间就火了),事实上他们两没啥关系。
-
竞争:看到网景公司有了js,微软感觉不行啊,我的IE要被干掉啊,同时也感到js的前途无量,于是参考JavaScript弄了个名为JScript浏览器脚本语言。
-
标准:
这3大利器结合起来使用,可以操作HTML页面中所有的标签/属性/CSS样式。
| 作用 | |
|---|---|
| ECMA Script | 构成了JS核心的语法基础 |
| BOM | Browser Object Model 浏览器对象模型,用来操作浏览器上的对象 |
| DOM |
JavaScript概念
JavaScript一种弱类型语言;
在Java中1个变量的数据类型必须提前声明数据类型,且变量声明之后数据类型无法更改;

在JavaScript中1个变量的数据类型无需提前声明数据类型,且变量声明之后数据类型可以更改;

基于对象的语言(大部分对象已经被创建好了,不用创建类;),相对随便的客户端脚本语言 。
它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,它的主要目的是验证发往服务端之前的数据、增加Web互动、加强用户体验;
与CSS一样嵌套在HTML代码标签里面,在html代码执行时,随之执行, 为HTML代码增加动态效果。
JS核心的语法
JavaScript的语法和Java十分类似,以下讲解的是遵循ESMAScript6脚本语言规范的JavaScript。
HTML引入JS有两种种方式
- 内部脚本 <script type="text/javascript"> js代码 </script>
- 外部脚本 <script type="text/javascript" src="外部js文件"></script>
注意:通过script标签 src引入外部js文件之后,script标签里面的js代码,将无法执行;
- 浏览器弹框输出字符 alert('哈哈')
- 输出html内容到页面 document.write('呵呵')
- 输出到浏览器控制台 console.log('嘻嘻')
变量声明
ESMAScript6版本
let a = "xxx"; let a = true; let a = 5; const PI=3.14;//常量声明之后不能再变动值
和Java一样JavaScript数据类型大体分为2类
- 基本数据类型存在栈;
- 引用的数据类型放在堆里面,赋值时值为引用;
* string:字符串类型(单引号 双引号) * number:数值类型(整型 浮点型) * boolean:布尔型 * undefined:未定义的 * object: 对象和null
1. 算数运算符 + - * / % ++ -- 2. 赋值运算符 = += -= *= /= 3. 比较运算符 > < ==(===) !=(!==) >= <= 4. 逻辑运算符 && || ! 5. 三元(目)运算符 条件表达式 ?为真: 为假
JavaScript扩展运算符(...)
扩展运算符可以扩展数组中元素和对象中的属性;
扩展数组中的元素
arra1=[1,2,3] (3) [1, 2, 3] [...arra1,5,5,6] (6) [1, 2, 3, 5, 5, 6] arra2=[...arra1,5,5,6] (6) [1, 2, 3, 5, 5, 6] [...arra1,...arra2] (9) [1, 2, 3, 1, 2, 3, 5, 5, 6]
扩展对象中的属性
{name:"张根"}
{...person,hobbies:["读书","看报"]}
{name: '张根', hobbies:['读书', '看报']}
- if
- switch
1. if判断 if (条件表达式) { 代码块; } else if(条件表达式) { 代码块; } else { 代码块; } 2. switch判断 switch(条件表达式){ case 满足条件1 : 代码块 break; case 满足条件2 : 代码块 break; default: 默认代码块; }
1. 普通for循环 for(let i= 0; i<10; i++){ 需要执行的代码; } 2. 增强for循环 for(let obj of array){ 需要执行的代码; } 3. while循环 while (条件表达式) { 需要执行的代码; } 4. do..while循环 do{ 需要执行的代码; }while(条件表达式); 5. break和continue break: 跳出整个循环 continue:跳出本次循环
功能:JavaScript中的函数用于执行特定功能的代码块,为了方便理解,也可以称为js方法,其作用就类似于Java中的方法。
JavaScript中的函数分为
- 普通函数
- 匿名函数
普通函数 function 方法名(参数列表){ 方法实现 } 匿名函数 function (参数列表){ 方法实现 }
时间的功能:JS可以监听用户的行为,得到一个事件,并调用函数来完成用户交互功能。
1. 点击事件: 1. onclick:单击事件(*) 2. ondblclick:双击事件 2. 焦点事件 1. onblur:失去焦点(*) 2. onfocus: 元素获得焦点(*) 3. 加载事件: 1. onload:页面加载完成后立即发生(*) 4. 鼠标事件: 1. onmousedown 鼠标按钮被按下 2. onmouseup 鼠标按键被松开 3. onmousemove 鼠标被移动 4. onmouseover 鼠标移到某元素之上 5. onmouseout 鼠标从某元素移开 5. 键盘事件: 1. onkeydown 某个键盘按键被按下 2. onkeyup 某个键盘按键被松开 3. onkeypress 某个键盘按键被按下(不会监听功能键) 6. 改变事件 1. onchange 域的内容被改变(*) 7. 表单事件: 1. onsubmit 提交按钮被点击(*)
//表单的onsubmit接收后面调用方法的返回; true 正常提交 false 不提交
document.getElementById("myForm").onsubmit = function () {
return usernameCheck();
}
通过事件,可以将HTML上的元素跟函数绑定在一起来完成一些具体的功能。
绑定方式有两种:
- 普通函数绑定
- 匿名函数绑定
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>事件绑定</title>
<!--
事件绑定: 当某个事件发生了的时候,我们去调用某个方法
1. 普通函数绑定: 直接在HTML元素上通过事件名=方法名
2. 匿名函数绑定: 在js中首先获取到HTML的元素,然后通过事件名=函数
-->
</head>
<body>
<input type="button" value="普通函数" onclick="xixi()"> <br>
<input type="button" value="匿名函数" id="nm"> <br>
<script>
//普通函数绑定 定义一个方法
function xixi() {
console.log("嘻嘻");
}
//匿名函数绑定
document.getElementById("nm").onclick = function () {
console.log("哈哈");
}
// document.getElementById("nm").onclick = haha;
// function haha() {
// console.log("哈哈");
// }
</script>
</body>
</html>
Window对象可以实现两种弹框:
- 警告窗(alert)
- 确认窗(confirm)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>js两个弹框</title>
</head>
<body>
<!--
JS两种弹框: Window对象可以实现两种弹框:警告窗(alert)、确认窗(confirm)
-->
<script>
//警告窗(alert)
//alert("哈哈");
//确认窗(confirm) 返回值: 确认true 取消 false
console.log(confirm("您确认要删除这条数据吗?"));
</script>
</body>
</html>
1.2.Windows定时器
Window对象可以实现两种定时器
- setInterval(周期性任务)炸弹
- setTimeout(一次性任务)每天的闹钟
1.3.清除Windows定时器
定时器开启之后也可以清除。
- clearTimeout(任务标识); 按照任务标识取消任务
- clearInterval(任务标识); 按照任务标识取消任务
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>js两个定时器</title>
</head>
<body>
<!--
JS可以实现两种定时器:
setTimeout(任务,多少ms之后) 一次性任务: 定了某个时间点, 任务仅仅执行一次; 返回值是任务标识
clearTimeout(任务标识); 按照任务标识取消任务
setInterval(任务,间隔多少ms) 周期性任务: 以一定的频率重复执行任务; 返回值是任务标识
clearInterval(任务标识); 按照任务标识取消任务
-->
<button id="btn1">取消打印时间</button>
<button id="btn2">取消打印自然数</button>
<script>
// 1. 定时5秒之后在控制台打印当前时间
let job1 = setTimeout(function () {
console.log(new Date());
}, 5000);
// 2. 点击按钮取消打印时间
document.getElementById("btn1").onclick = function () {
clearTimeout(job1);
};
// 3. 每隔2秒在控制台打印递增自然数
let num = 1;
let job2 = setInterval(function () {
console.log(num++);
}, 2000);
// 4. 点击按钮取消打印自然数
document.getElementById("btn2").onclick = function () {
clearInterval(job2);
}
</script>
</body>
</html>
1.4.
Location对象指的是浏览器的地址栏,它的主要作用是地址的获取、刷新和跳转。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>location对象</title>
</head>
<body>
<!--
location地址对象
reload():刷新当前页面
href:获取当前浏览器地址
href="地址": 跳转到目标地址
-->
<button onclick="refresh()">刷新当前页面</button>
<br>
<button onclick="addr()">获取当前浏览器地址</button>
<br>
<button onclick="jump()"> 跳转页面(重点)</button>
<br>
<script>
//刷新当前页面
function refresh() {
location.reload();
}
//获取当前浏览器地址
function addr() {
console.log(location.href);
}
//获取当前浏览器地址
function jump() {
location.href = "https://www.baidu.com";
}
</script>
</body>
</html>
2.DOM对象
HTML页面内容包括:元素 属性 内容 样式 。
2.1.获取标签元素
通过DOM对象,可以使用4种方式,获取标签对象。
获取元素对象
document.getElementById(id属性值)
document.getElementsByTagName(标签名)
document.getElementsByClassName(class属性值)
document.getElementsByName(name属性值)
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>获取dom元素</title> </head> <body> <form action="#" method="get"> 姓名 <input type="text" name="username" id="username" value="德玛西亚"/> <br/> 性别 <input type="radio" name="gender" value="male" class="radio">男  <input type="radio" name="gender" value="female" class="radio"/>女<br/> 爱好 <input type="checkbox" name="hobby" value="smoke">抽烟 <input type="checkbox" name="hobby" value="drink">喝酒 <input type="checkbox" name="hobby" value="perm">烫头<br/> 学历 <select name="edu"> <option value="0">请选择</option> <option value="1">入门</option> <option value="2">精通</option> <option value="3">放弃</option> </select> </form> <script> // 1.获取id="username"的标签对象 console.log(document.getElementById("username")); console.log(document.getElementById("username").name); console.log(document.getElementById("username").value); // 2.获取class="radio"的标签对象数组 console.log(document.getElementsByClassName("radio")); for (let html of document.getElementsByClassName("radio")) { console.log(html.value); } // 3.获取所有的option标签对象数组 console.log(document.getElementsByTagName("option")); // 4.获取name="hobby"的input标签对象数组 console.log(document.getElementsByName("hobby")); </script> </body> </html>
2.2.获取标签
- 获取元素的内容: js对象.innerHTML
- 修改元素的内容: js对象.innerHTML='xxx'
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>操作dom内容</title> <style> #myDiv { border: 1px solid red; } </style> <!-- 获取元素的内容: js对象.innerHTML 修改元素的内容: js对象.innerHTML='xxx' --> </head> <body> <div id="myDiv">程序猿最讨厌的四件事:<br>自己写注释、自己写文档……</div> <script> let myDiv = document.getElementById('myDiv'); //1. 在控制台打印div中的内容 console.log(myDiv.innerHTML); //2. 在上面div中的内容中添加---> <br>别人不写注释、别人不写文档…… //myDiv.innerHTML = myDiv.innerHTML + "<br>别人不写注释、别人不写文档……"; myDiv.innerHTML += "<br>别人不写注释、别人不写文档……"; </script> </body> </html>
2.3.获取标签
获取元素的属性: js对象.属性名
设置元素的属性: js对象.属性名='xxx'
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>操作dom属性</title> <!-- 获取元素的属性: js对象.属性名 设置元素的属性: js对象.属性名='xxx' --> </head> <body> <form action="#" method="get"> 姓名 <input type="text" name="username" id="username" value="德玛西亚"/> <br/> </form> <script> let myInput = document.getElementById("username"); // 1.获取文本框value属性的值 console.log(myInput.value); console.log(myInput.type); // 2.修改文本框value属性的值 myInput.value = "haha"; myInput.type = "password"; </script> </body> </html>
给标签的style属性设置一个css样式: js对象.style.样式名='样式值'
给标签的style属性设置多个css样式: js对象.style.cssText='css样式'
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>操作dom样式</title> <!-- 给标签的style属性设置一个css样式: js对象.style.样式名='样式值' 给标签的style属性设置多个css样式: js对象.style.cssText='css样式' --> </head> <body> <p id="p1">1. 设置一个css样式, 设置p1的背景色为红色</p> <p id="p2">2. 设置多个css样式, 设置p2的背景色为红色,并且字体为绿色</p> <script> let p1 = document.getElementById("p1");//获取段落标签 let p2 = document.getElementById("p2");//获取段落标签 // 1. 设置一个css样式, 设置p1的背景色为红色 p1.style.backgroundColor = "red"; // 2. 设置多个css样式, 设置p2的背景色为红色,并且字体为绿色 // p2.style.backgroundColor = "red"; // p2.style.color = "green"; p2.style.cssText = "background-color: red;color: green"; </script> </body> </html> <!--<p id="p1" style="background-color: red">1. 设置一个css样式, 设置p1的背景色为红色</p>--> <!--<p id="p2" style="background-color: red;color: green">2. 设置多个css样式, 设置p2的背景色为红色,并且字体为绿色</p>-->
在JavaScript中可以使用正在表达式,根据定义好的规则,可以过滤文本内容;例如用于校验表单。
* 正则语法: let rege = /正则表达式/; 创建正则规则对象 rege.test(字符串) 判断指定字符串是否符合正则规则 * 常见符号: ^ 表示匹配字符串的开始位置 $ 表示匹配字符串的结束位置 * 表示匹配 零次到多次 + 表示匹配 一次到多次 (至少有一次) ? 表示匹配零次或一次 . 表示匹配单个字符 | 表示为或者,两项中取一项 ( ) 小括号表示匹配括号中全部字符 [ ] 中括号表示匹配括号中一个字符 范围描述 如[0-9 a-z A-Z] { } 大括号用于限定匹配次数 如 {n}表示匹配n个字符 {n,}表示至少匹配n个字符 {n,m}表示至少n,最多m \ 转义字符 如上基本符号匹配都需要转义字符 如 \* 表示匹配*号 \w 表示英文字母和数字 \W 非字母和数字 \d 表示数字 \D 非数字
正则对象.test()
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>正则表达式</title>
</head>
<body>
<!--
1. 创建正则规则
let rege = /正则表达式/;
2. 验证方法
rege.test(字符串): 符合正则规则就返回true,否则false
-->
<script>
//编写一个验证手机号的正则: 11位, 第一位:1 第二位:3456789 后面9位:数字
//1. 定义正则规则
let rege = /^1[3-9]\d{9}$/;
//2. 使用正则规则匹配你的手机号
console.log(rege.test("13000000000"));
console.log(rege.test("12000000000"));
console.log(rege.test("13000000n00"));
</script>
</body>
</html>



浙公网安备 33010602011771号