当前位置: 首页 > news >正文

JavaScript数据交互

一、JavaScript 基本概念与引入方式

1.1 JavaScript 是什么

  • 一种运行在客户端的脚本语言,由 Brendan Eich 在 10 天内设计完成。

  • 最初名为 LiveScript,后更名为 JavaScript。

  • 不需要编译,由 JS 引擎(如 V8)逐行解释执行。

  • 也可用于服务器端开发(Node.js)、桌面应用(Electron)、移动端(Cordova)等。

1.2 JavaScript 的作用

 表单动态校验(密码强度检测) ( JS 产⽣最初的⽬的 )、⽹⻚特效、服务端开发(Node.js)、桌⾯程序(Electron)、App(Cordova)、控制硬件-物联⽹(Ruff)、游戏开发(cocos2d-js)

1.3 HTML/CSS(标记语言--描述类语言)/JS(脚本语言--编程类语言)的关系

  • HTML:结构,决定网页的结构和内容(决定看到了什么),相当于人的身体

  • CSS:样式,决定网页给用户呈现的模样(决定好不好看),相当于给人穿衣服,化妆

  • JavaScript:行为与交互,实现业务逻辑和页面控制(决定功能),相当于人的各种动作

1.4 JS 的组成

  • ECMAScript:语法规范,规定了JS的编程语法和基础核⼼知识,是所有浏览器⼚商共同遵守的⼀套JS语法⼯业标 准。

  • DOM:⽂档对象模型(DocumentObject Model,简称DOM),是W3C组织推荐的处理可扩展标记语⾔的标准 编程接⼝。通过 DOM 提供的接⼝可以对⻚⾯上的各种元素进⾏操作(⼤⼩、位置、颜⾊等)

  • BOM:浏览器对象模型(Browser Object Model,简称BOM) 是指浏览器对象模型,它提供了独⽴于内容的、可 以与浏览器窗⼝进⾏互动的对象结构。通过BOM可以操作浏览器窗⼝,⽐如弹出框、控制浏览器跳转、 获取分辨率等。

1.5 JavaScript 的引入方式

方式语法特点
内联式<button onclick="alert('Hello')">不推荐,可读性差
内嵌式<script>console.log('Hello')</script>适合学习和小规模代码
外部式<script src="script.js"></script>推荐,利于维护和复用

二、JavaScript 基础语法

2.1 变量与常量

①什么是变量---数据存储的容器

本质:变量是程序在内存中申请的⼀块⽤来存放数据的空间

内存层面:

变量实际上是对内存位置的抽象引用

基本类型直接存储值,引用类型存储内存地址

JavaScript 引擎自动管理内存分配和回收

②变量的定义

关键字作用是否可重新赋值作用域
varES5声明变量函数作用域
letES6+声明变量块级作用域
const声明常量块级作用域

最佳实践

  • 优先使用 const,当值不会重新赋值时使用,提高代码安全性

  • 需要重新赋值时用 let,当需要重新赋值时使用

  • 避免使用 var,除非需要兼容老旧环境

③JavaScript 变量命名的核心规范包括

-遵循基本语法规则(字母、数字、下划线、$符号,不能以数字开头)

-不能使用关键字和保留字

-区分大小写

-使用驼峰命名法(推荐)

-命名应具有语义化,便于理解和维护

-遵循特殊类型变量的命名约定(布尔值、数组、函数等)

2.2 输入与输出

方法作用返回值
alter(对象)弹出警告框
console.log(对象)控制台输出
prompt("提示文本内容")弹出输入框用户输入的字符串

2.3 数据类型

简单数据类型(基本类型)---存储具体的值

类型说明示例
Number数字103.14
String字符串"hello"
Boolean布尔值truefalse
Undefined变量定义未赋值let a;
Null空对象let a = null;

复杂数据类型(引用类型)---存储对象的内存地址值

  • object---null,数组,函数

类型检测

  • typeof variable:返回类型字符串

  • variable instanceof Array:返回布尔值

类型转换

转换目标方法示例
转字符串String()toString()String(123) → "123"
转数字parseInt()parseFloat()Number()parseInt("10px") → 10
转布尔Boolean()Boolean("") → false

隐式转换:+ 操作符,可用于转字符串;!! 操作符,可用于转布尔

注意

  • parseInt() 和 parseFloat() 会从字符串的开始解析数字,直到遇到非数字字符为止
  • parseInt() 转换的数据只包含整数部分,不含小数的部分
  • parseFloat() 转换的数据包含整数部分,也含小数的部分
  • Number() 对于不能转换的字符串会返回 NaN
  • toString() 方法可以用于数字、布尔值、对象等类型转换为字符串
  • 在比较运算中,JavaScript会自动进行类型转换(隐式转换)
  • 使用严格相等运算符 === 可以避免自动类型转换

三、运算符与流程控制

3.1 运算符

①算数运算符:

  • +:加法;
  • -:减法
  • *:乘法
  • /:除法
  • %:取模(求余数)

②递增和递减运算符:

  • ++:递增(将变量值加1)-------相当于Python的 +=1
  • --:递减(将变量值减1)-------相当于Python的 -=1

注意点:++,--参与运算

              ++,-- 前置:

                先对变量进行递增或递减操作

                然后返回变量的新值

             ++,-- 后置:

                先返回变量的当前值

                然后对变量进行递增或递减操作

③⽐较运算符:

  • ==:相等(不严格,会进行类型转换)---只比较值是否一样,不比较类型
  • ===:全等(严格相等,值和类型都必须相同)-------比较值和类型是否一样
  • !=:不相等
  • !==:不全等
  • >、<、>=、<=:大于、小于、大于等于、小于等于

④逻辑运算符

  • &&:逻辑与(两个条件都为真时才为真)---相当于Python的and
  • ||:逻辑或(任一条件为真即为真)---相当于Python的or
  • !:逻辑非(取反)---相当于Python的not

⑤赋值运算符:

  • =:简单赋值
  • +=:加并赋值
  • -=:减并赋值
  • *=:乘并赋值
  • /=:除并赋值
  • %=:取模并赋值

3.2 流程控制

①顺序控制

程序按照代码书写的顺序依次执行,这是最基础的执行方式。

②条件分支

-根据条件判断来决定执行哪一段代码。

-常见的分支控制语句包括:

if语句---单分支,双分支,多分支

//单分支
if(条件){执行逻辑代码}
//双分支if(条件){执行逻辑代码}else{执行逻辑代码}
//多分支if(条件1){执行逻辑代码1}else if(条件2){执行逻辑代码2}else{执行逻辑代码3}switch语句switch (表达式) {case 值1:// 当表达式等于值1时执行的代码break;case 值2:// 当表达式等于值2时执行的代码break;default:// 当表达式不匹配任何case时执行的代码}

③循环结构

重复执行某段代码直到满足特定条件为止。

循环三要素:初始化; 条件; 更新

//常见的循环控制语句包括:
for循环
for (初始化; 条件; 更新) {// 循环体
}// 示例
for (let i = 0; i < 5; i++) {console.log(i);
}while循环
while (条件) {// 循环体
}// 示例
let i = 0;
while (i < 5) {console.log(i);i++;
}do-while循环
do {// 循环体
} while (条件);// 示例
let j = 0;
do {console.log(j);j++;
} while (j < 5);

循环控制

  • break:跳出整个循环

  • continue:跳过本次循环,继续下一次


四、函数

4.1 函数声明与调用

①函数的作用:可以复用的功能代码块

②函数的创建与使用:

-具名函数(命名函数)创建:

function 函数名称(形参1,形参2……){

                函数体

}

-匿名函数(函数表达式)创建

let 函数变量名称= function(形参1,形参2……){

                函数体

}

-箭头函数

let 函数变量名称= (形参1,形参2……)=>{

                函数体

}

// 具名函数
function greet(name) {return "Hello, " + name;
}// 匿名函数(函数表达式)
const greet = function(name) {return "Hello, " + name;
};// 箭头函数(ES6+)
const greet = (name) => "Hello, " + name;

4.2 参数与返回值

  • 参数可设置默认值:function greet(name = "Guest")

  • 不定参:function sum(...numbers)

  • return 返回值,若无 return 则返回 undefined

4.3 函数作用域与 this

  • 函数内部变量为局部变量

  • this 指向调用者(动态变化)

  • 箭头函数中的 this 继承自外层作用域


五、数组与对象

5.1 数组

①数组对象的作用是:使用单独的变量名来存储一系列的值。

②创建方式

-字面量-----[元素1,元素2,……]----推荐

-构造函数---- new Array(元素1,元素2,……)

③基本操作方法(重点)

增:

  • push(): 在数组末尾添加一个或多个元素----新数组的长度
  • unshift(): 在数组开头添加一个或多个元素---新数组的长度
  • splice(): 在数组指定位置添加元素----空数组 []

  • pop(): 删除并返回数组的最后一个元素----被删除的元素
  • shift(): 删除并返回数组的第一个元素----被删除的元素
  • splice(): 删除指定位置的元素----包含被删除元素的数组

  • 通过索引直接赋值: 修改指定索引位置的元素----新值
  • splice(): 替换指定位置的元素----包含被替换元素的数组

  • 通过索引访问:获取指定索引位置的元素---指定位置的元素
  • indexOf():查找元素第一次出现的索引---元素索引或-1
  • lastIndexOf():查找元素最后一次出现的索引---元素索引或-1
  • find():查找满足条件的第一个元素---元素值或undefined
  • findIndex():查找满足条件的第一个元素的索引---元素索引或-1
  • includes():判断数组是否包含指定元素---true或false
// 创建
const arr = [1, 2, 3];
const arr2 = new Array(1, 2, 3);// 增删改查
arr.push(4);        // 末尾添加
arr.pop();          // 末尾删除
arr.unshift(0);     // 开头添加
arr.shift();        // 开头删除
arr.splice(1, 1, 99); // 删除索引1处1个元素,插入99
arr.indexOf(2);     // 查找索引
arr.includes(2);    // 是否包含

5.2 对象

①作用

用于描述现实世界中的事物,可以包含属性和方法

是JavaScript中的一种复杂数据类型,存储的是内存地址值

②创建

let obj = {

属性名1: 属性值1,

属性名2: 属性值2

};

③基本操作方法

增:

  • 直接添加属性:对象.属性名 = 值 或 对象[属性名] = 值

删:

  • delete 对象.属性名

改:

  • 修改属性值:对象.属性名 = 新值

查:

  • 访问属性:对象.属性名 或 对象[属性名]
  • 使用 Object.keys(obj) 获取所有属性名
  • 使用 Object.values(obj) 获取所有属性值
  • 使用 Object.entries(obj)获取对象属性名和属性值
const person = {name: "Alice",age: 25,greet() {console.log("Hello");}
};// 增删改查
person.city = "Beijing";
delete person.age;
person.name = "Bob";
console.log(person.name);

六、DOM 操作

DOM文档对象模型---操作页面的标签,文本,属性

DOM对象----document object model

document 是DOM的顶层对象

6.1 DOM对象获取的常用方式

  • getElementById():通过元素的id属性获取元素---单个元素对象或null
  • getElementsByClassName():通过class属性获取元素集合--HTMLCollection伪数组(具体数组的特性,但没数组的相关操作方法)
  • getElementsByTagName():通过标签名获取元素集合----HTMLCollection
  • querySelector():通过CSS选择器获取第一个匹配元素---单个元素对象或null
  • querySelectorAll():通过CSS选择器获取所有匹配元素---NodeList

6.2 DOM事件基本操作

1.事件三要素

  • 事件源:引发事件的HTML元素
  • 事件类型:如点击(click)、鼠标悬停(mouseover)等
  • 事件处理程序:响应事件的函数

2. 事件处理方法

on+事件名称=回调函数------不能获取动态添加元素节点的对象及相关数据

addEventListener(事件名称,回调函数)----能获取动态添加元素节点的对象及相关数据--推荐使用

6.3 DOM的基本操作

①文本内容操作

  • 元素对象.innerHTML
  • 元素对象.innerText

②标签属性操作

  • 元素对象.src
  • 元素对象.href
  • 元素对象.id
  • 元素对象.className

③标签样式操作

  • 元素对象.style
  • 元素对象.className

6.4 this对象

全局环境:

  • this指向全局对象(浏览器中是window)

函数调用:

  • 对象方法:this指向调用该方法的对象
  • 箭头函数:this继承自外层作用域
  • 事件处理:this指向触发事件的元素
  • 构造函数:this指向新创建的实例(了解)

七、BOM 操作

7.1 定时器

setTimeout(回调函数,毫秒时间) ----临时计时器----一次性使用

setInterval(回调函数,毫秒时间) ---- 循环计时器--- 循环使用

// 一次性定时器
const timer = setTimeout(() => {console.log("执行一次");
}, 1000);// 循环定时器
const interval = setInterval(() => {console.log("每隔1秒执行");
}, 1000);// 清除定时器
clearTimeout(timer);
clearInterval(interval);

7.2 Location 与 History

①location URL

  • location.hostname 返回 web 主机的域名
  • location.pathname 返回当前页面的路径和文件名
  • location.port 返回 web 主机的端口 (80 或 443)
  • location.protocol 返回所使用的 web 协议(http: 或 https:)

②history

  • history.back() - 与在浏览器点击后退按钮相同(上一页)
  • history.forward() - 与在浏览器中点击向前按钮相同(下一页)
  • history.go(-1) - 上一页
  • history.go(1) - 下一页
// 获取当前URL信息
console.log(location.href);
console.log(location.hostname);// 页面跳转
location.href = "https://example.com";// 历史记录操作
history.back();     // 后退
history.forward();  // 前进
history.go(-1);     // 后退一页

http://www.dtcms.com/a/394171.html

相关文章:

  • 11.2.5 自定义聊天室
  • 力扣:字母异味词分组
  • Linux视频学习笔记
  • 2014/12 JLPT听力原文 问题四
  • Elasticsearch面试精讲 Day 21:地理位置搜索与空间查询
  • 华为数字化实战指南:从顶层设计到行业落地的系统方法论
  • 外部 Tomcat 部署详细
  • 【回文数猜想】2022-11-9
  • 216. 组合总和 III
  • Bugku-请攻击这个压缩包
  • 2. NumPy数组属性详解:形状、维度与数据类型
  • 【css特效】:实现背景色跟随图片相近色处理
  • vuex原理
  • 内存泄露怎么排查?
  • nginx配置防盗链入门
  • Kafka 多机房、跨集群复制、多租户、硬件与操作系统、全栈监控
  • leetcode136.只出现一次的数字
  • 力扣hot100:环形链表II(哈希算法与快慢指针法思路讲解)
  • 【算法】【Leetcode】【数学】统计1的个数 数位统计法
  • Kafka面试精讲 Day 21:Kafka Connect数据集成
  • MySQL 主从复制完整配置指南
  • 力扣每日一刷Day 23
  • LeetCode 53. 最大子数组和(四种解题思路)包含扩展返回最大和的数组
  • RTX 4090助力深度学习:从PyTorch到生产环境的完整实践指南——高效模型训练与优化策略
  • 23种设计模式之【桥接模式】-核心原理与 Java实践
  • LabVIEW手部运动机能实验
  • 669. 修剪二叉搜索树
  • 大QMT自动可转债申购
  • PolarCTF PWN 网络安全2023秋季个人挑战赛刷题
  • MySQL-day4_02(事务)