一、JavaScript的定义
JavaScript 是一种轻量级的、解释型的编程语言,广泛应用于网页前端开发中。它可以与 HTML 和 CSS 协作,动态地修改网页内容、响应用户操作并与服务器通信。
二、JavaScript的组成
- ECMAScript:ECMA(欧洲计算机协会)制定了JS的基本语法
- BOM(没有标准):浏览器对象模型,主要实现对浏览器窗口的一些操作
- DOM(重点):文档对象模型,主要实现对HTML文档的增、删、改、查
三、JavaScript的引入HTML的方式
引入方式 | 代码 | 备注 |
行内式 | <p οnclick="alert('Hello, World!')"> | |
内部式 | <script> 与 </script> | |
外链式 | <script src="script路径"></script> | 重点 |
四、JavaScript的基本语法
1.注释
注释 | 注释代码 |
单行注释 | // 注释内容 |
多行注释 | /* 注释内容 */ |
2.输入/输出
- 获取用户输入:prompt() ——一般不用
- 弹出提示窗:alert()
- 输出到控制台:console.log()
- 输出到页面上:document.write()
3.数据类型和变量声明
- 原始数据类型
- string:字符串
- number:数字类型
- boolean:布尔类型
- null:表示对象引用为空
- undifined:未定义类型
- 引用数据类型:如Object、Array等
- 类型检测:typeof
- 变量声明:JavaScript是弱类型语言,不重视数据类型的定义,但是js会根据为变量赋值情况自定判断该变量是什么类型
- var——(默认不写为var) :定义的变量一定是全局变量
- let:如果定义在局部代码块则是局部变量
- const:定义常量,因此一定要初始化,同时也有块级作用域的使用范围。
尽量使用const来声明变量,这可以让代码更安全,避免无意中修改变量值导致的错误。
在不需要常量的情况下,使用let来声明变量,以利用其块级作用域的特性。
避免使用var,因为它可能会导致意外的全局变量声明或其他作用域问题。
- 运算符
运算类型 | 运算符 |
算数运算符 | + - * / % ++ -- |
赋值运算符 | = += -= *= /= %= |
比较运算符 | == === != !== > < >= <= |
逻辑运算符 | && || ! |
三元运算符 | 条件?表达式1:表达式2 |
五、流程控制
1.if语句
//分支语句
if(boolean类型){
//代码块;
}else if(boolean类型){
//代码块;
}else{
//代码块;
}
2.for语句
//普通for循环语句
for(var i = 0;i<3;i++){
//执行代码块
}
//for···of循环——输出结果1 6 9
let arr = [1,6,9];
for(let s of arr){
console.log(s);
}
//for···in循环——输出结果0 1 2
for(let index in arr){
console.log(index);
}
3.while语句
while(条件表达式){
//循环代码块
}
六、数组
1.定义
JavaScript 中的数组对象用于在单个变量名下存储多个元素。数组可以包含不同的数据类型,并且可以动态调整大小。数组的索引从 0 开始。
2.初始化
//静态初始化1
var array = [1,2,3];
//静态初始化2
var arr2 = new Array(1,2,3);
//动态初始化
var arr1 = new Array(5);
3.方法
方法 | 代码 | 备注 |
压入元素到尾部 | push() | |
弹出尾部的一个元素,返回值为数组最后一个元素 | pop() | |
压入元素到头部 | unshift() | |
弹出头部的元素,返回值为数组第一个元素 | shift() | |
可添加,可删除 | splice() | 常用 |
七、函数
1.定义函数的方式
- 函数声明
function 函数名(参数) {
// 函数体
}
- 函数表达式
const functionName = function(参数) {
// 函数体
};
- 箭头函数
const functionName = (参数) => {
// 函数体
};
八.DOM文档对象模型
1.定义
DOM 是 Document Object Model(文档对象模型),是W3C组织推荐的处理HTML文档的标准编程接口, 通过这些接口可以改变网页的内容、结构和样式,实现对页面中元素的增、删、改、查操作; 由于HTML文档被浏览器解析后就是一棵DOM树,要改变HTML的结构,就需要通过JavaScript来操作DOM。
2.DOM树的概念
- 文档:一个页面就是一个文档,DOM中使用document表示
- 节点:网页中所有的内容都是节点(标签、属性、文本、注释等),DOM中使用node表示。而node至少有nodeType(节点类型)、nodeName(节点名称)和nodeValue(节点值)这三个基本属性
- 元素:页面中所有标签都是元素,DOM中使用element表示
3.DOM操作
3.1获取节点——重点
- 通过id获取:getElementById()——返回值是元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<script>
window.onload = function(){
let id = document.getElementById("get-id");
console.log()
}
</script>
</head>
<body>
<div id="get-id"></div>
</body>
</html>
效果如下:
- 通过标签名获取:getElementByTagName()——返回值是集合
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<script>
window.onload = function(){
let div = document.getElementsByTagName("div");
console.log(div);
// 可使用普通for循环遍历div
for (var i = 0; i < div.length; i++) {
console.log(div[i]);
}
// 可使用for of循环遍历div
for(d of div){
console.log(d)
}
}
</script>
</head>
<body>
<div></div>
<div></div>
<div></div>
<div></div>
</body>
</html>
效果图如下:
- 通过Class名获取:getElementByClassName()——返回值是集合
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<script>
window.onload = function(){
let div = document.getElementsByClassName("div-class");
console.log(div);
// 可使用普通for循环遍历div
for (var i = 0; i < div.length; i++) {
console.log(div[i]);
}
// 可使用for of循环遍历div
for(d of div){
console.log(d)
}
}
</script>
</head>
<body>
<div class="div-class">1</div>
<div class="div-class">2</div>
<div class="div-class">3</div>
<div class="div-class">4</div>
</body>
</html>
效果图如下:
- 通过name属性获取:getElementByName()——返回值是节点列表
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<script>
window.onload = function(){
let div = document.getElementsByName("div-class");
console.log(div);
// 可使用普通for循环遍历div
for (var i = 0; i < div.length; i++) {
console.log(div[i]);
}
// 可使用for of循环遍历div
for(d of div){
console.log(d)
}
}
</script>
</head>
<body>
<div name="div-class">1</div>
<div name="div-class">2</div>
<div name="div-class">3</div>
<div name="div-class">4</div>
</body>
</html>
效果图如下:
- 返回满足条件的第一个元素:querySelector()——返回值是元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<script>
window.onload = function(){
let id = document.querySelector("#div-id");
console.log(id);
let classes = document.querySelector(".div-class");
console.log(classes);
let div = document.querySelector("div");
console.log(div)
}
</script>
</head>
<body>
<div class="div-class">1</div>
<div class="div-class">2</div>
<div id="div-id">3</div>
<div name="div-name">4</div>
<div name="div-name">5</div>
</body>
</html>
效果图如下:
- 返回满足条件的所有元素:querySelectorAll()——返回值是节点集合
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<script>
window.onload = function(){
let id = document.querySelectorAll("#div-id");
console.log(id);
for(i of id ){
console.log(i);
}
let classes = document.querySelectorAll(".div-class");
console.log(classes);
for(c of classes ){
console.log(c);
}
let div = document.querySelectorAll("div");
console.log(div)
for(d of div ){
console.log(d);
}
}
</script>
</head>
<body>
<div class="div-class">1</div>
<div class="div-class">2</div>
<div id="div-id">3</div>
<div name="div-name">4</div>
<div name="div-name">5</div>
</body>
</html>
效果图如下:
- 获取父元素:parentElement——返回值是元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<script>
window.onload = function(){
let child = document.querySelectorAll(".child");
console.log(child[0].parentElement);
}
</script>
</head>
<body>
<div id="father">
<div class="child"></div>
</div>
</body>
</html>
效果图如下:
- 获取所有子元素节点:children——返回值是集合
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<script>
window.onload = function(){
let father = document.querySelector("#father");
console.log(father.children);
}
</script>
</head>
<body>
<div id="father">
<div class="child"></div>
</div>
</body>
</html>
效果图如下:
- 获取第一个子元素节点:firstElementChild;获取最后一个子元素节点:lastElementChild
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<script>
window.onload = function(){
let father = document.querySelector("#father");
console.log(father.firstElementChild);
console.log(father.lastElementChild);
}
</script>
</head>
<body>
<div id="father">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
<div class="child">4</div>
</div>
</body>
</html>
效果图如下:
- 返回指定元素的前一个兄弟元素:previousElementSibling;返回指定元素之后的下一个兄弟元素:nextElementSibling
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<script>
window.onload = function(){
let child = document.getElementsByClassName("child");
let childTwo = child[1];
console.log(childTwo.previousElementSibling);
console.log(childTwo.nextElementSibling);
}
</script>
</head>
<body>
<div id="father">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
<div class="child">4</div>
</div>
</body>
</html>
效果图如下:
3.2修改DOM节点——重点
- 修改标签中的内容
- innerHTML——识别html标签和文本
- innerText——识别文本
- 修改CSS
- 行内样式修改:节点.style.样式名 = 值
- 添加新的样式,并保留原有样式:元素节点.classList.add("className")
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<style>
.red{
color: red;
}
.yellow{
color: yellow;
}
</style>
<script>
window.onload = function(){
let child = document.getElementsByClassName("child");
let childTwo = child[1];
childTwo.classList.add("yellow");
}
</script>
</head>
<body>
<div id="father">
<div class="child">1</div>
<div class="child red">2</div>
<div class="child">3</div>
<div class="child">4</div>
</div>
</body>
</html>
- 修改元素的class属性:元素节点.className = 'className'
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<style>
.red{
color: red;
}
</style>
<script>
window.onload = function(){
let child = document.getElementsByClassName("child");
let childTwo = child[1];
childTwo.className = "red";
}
</script>
</head>
<body>
<div id="father">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
<div class="child">4</div>
</div>
</body>
</html>
- 修改元素自有属性:元素节点.属性名=新值
- 自定义或原有属性操作:
- 为元素新增自定义属性:setAttribute(‘属性名’,‘值’)
- 获取自定义属性的值:getAttribute(‘属性名’)
- 从元素上移除自定义属性:removeAttribute(‘属性名’)
3.3插入DOM节点
- 先创建新节点——实际上就是在创建一个新的DOM树:document.createElement(标签名)
- 插入节点——将DOM树结合
- 在某个节点下添加子节点:父节点.appendChild(子节点)
- 将指定节点前插入指定节点前:父节点.insertBefore(新节点, 被指定节点);
3.4删除DOM节点
- 通过父节点删除该父节点下的指定子节点:父节点.removeChild(子节点);
- 直接删除子节点:要删除的节点.remove();
九.监听事件
1.事件的三要素
- 事件源——(谁)
- 事件类型——(因何触发)
- 事件处理程序——(事件发生后要做什么)
2.常见的监听事件
-
blur:失去焦点
-
focus:获取焦点
-
input:用于监听input、textarea、select等元素中内容的变化、立即触发
-
change:用于监听input、textarea、select等元素中内容的变化、失去焦点后触发
-
click:点击事件
-
dblclick:双击事件
3.监听事件的注册方式
- 在HTML中添加事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<style>
.red {
color: red;
}
.yellow {
color: yellow;
}
</style>
<script>
let btn = document.getElementById("btn");
function cilcked() {
console.log(1);
}
</script>
</head>
<body>
<button id="btn" onclick="cilcked()">点击</button>
</body>
</html>
- DOM元素中的监听事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<script>
window.onload = function () {
let btn = document.getElementById("btn");
btn.onclick = function () {
console.log(1);
};
}
</script>
</head>
<body>
<button id="btn">点击</button>
</body>
</html>
- 使用addEventListener()方法——重点,一般使用这个
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
<script>
window.onload = function () {
let btn = document.getElementById("btn");
btn.addEventListener("click", function () {
console.log(1);
})
}
</script>
</head>
<body>
<button id="btn">点击</button>
</body>
</html>
十、JSON的用法
- 对象转换成字符串:JSON.parse(对象);
- 字符串转化为对象:JSON.stringify(字符串);
十一、localStorage和sessionStorage
- localStorage和sessionStorage的作用及区别
作用:是 HTML5 提供的 Web Storage API,用于在浏览器端存储键值对数据。
区别:
localStorage | sessionStorage | |
数据持久性 | 永久存储,除非手动清除 | 仅在当前会话有效 |
关闭浏览器后 | 数据仍然保留 | 数据被清除 |
跨标签页共享 | 同源的所有标签页共享 | 仅限当前标签页 |
存储方式 | 存储字符串 | 存储字符串 |
十二 、BOM浏览器对象模型
1.定义
浏览器对象模型BOM(Browser Object Model),把“浏览器”当做一个“对象”来看待。
- BOM的顶级对象是window
- BOM学习的是浏览器窗口交互的一些对象
- BOM没的标准,它是浏览器厂商在各自浏览器上定义的,兼容性较差
2.常用的对象
2.1window对象
- 定义:浏览器的顶级对象,它是JS访问浏览器对象的一个接口,它是一个全局对象。定义在全局作用域中的变量、函数都会变成window对象的属性和方法, 我们在调用时可以省略window。
- 常用的window对象:
- 定时器
- setInterval()——周期性定时器;clearnInterval()——清除定时器
setTimeout(执行函数, 延迟时间, [arg1], [arg2], ...);
- setTimeout()——延时执行定时器;clearnTimeout()——清除定时器
setInterval(执行函数, 间隔时间, [arg1], [arg2], ...);
- setInterval()——周期性定时器;clearnInterval()——清除定时器
- 定时器
2.2location对象
- 定义:`location`对象表示当前页面的URL信息。例如,一个完整的URL我们可以location对象实现页面的跳转或者获取当前URL信息; URL:统一资源定位符,用于表示资源在网络上的地址,每个部分以`/`进行分隔。URL格式:协议://主机地址:端口【/工程名】/访问资源路径
- 常用属性
- location.href; //设置或获取浏览器地址栏中的URL地址
- location.protocol; // 协议
- location.host; // 主机地址
- location.port; // 端口
- location.pathname; // 访问资源路径
- location.search; // 参数
2.3navigator对象
- 定义:包含浏览器的信息
- 属性
- navigator.appName:浏览器名称;
- navigator.appVersion:浏览器版本;
- navigator.language:浏览器设置的语言;
- navigator.platform:操作系统类型;
- navigator.userAgent:浏览器设定的`User-Agent`字符串。
2.4screen对象
- 包含有关客户端显示屏幕的信息。
- 属性
- screen.width:屏幕宽度,以像素为单位;
- screen.height:屏幕高度,以像素为单位;
- screen.colorDepth:返回颜色位数,如8、16、24。
2.5history(不建议使用 )
- 定义:History 对象包含用户(在浏览器窗口中)访问过的 URL。History 对象最初设计来表示窗口的浏览历史。但出于隐私方面的原因,History 对象不再允许脚本访问已经访问过的实际 URL。唯一保持使用的功能只有 back()、forward() 和 go() 方法。