JavaScript入门知识

目录

一、JavaScript 的基本概念

1. 什么是 JavaScript

2. JavaScript的发展历史

3. JavaScript的特点

4. JavaScript 的用途

二、JavaScript 的基础语法

1. 注释

2. 变量声明

3. 数据类型

4. 运算符

5. 控制流语句

6. 输出语句

7. 函数

9. 数组

10. 对象

三、DOM操作

1. DOM 概念

2. DOM 操作的基本方法

(1)获取元素

        通过 ID 获取元素

        通过类名获取元素(返回 HTMLCollection)

        通过标签名获取元素(返回 HTMLCollection)

        通过选择器获取元素(返回 NodeList)

(2)修改元素内容

        修改文本内容

        修改 HTML 内容

(3)修改元素属性

(4)修改元素样式

        通过 style 对象修改样式

        通过 className 修改样式

(5)创建和插入元素

        创建新元素

        插入元素

(6)删除元素

(7)事件处理

        添加事件监听器

        移除事件监听器

3. DOM 的性能优化

四、事件处理

五、ES6 新特性

六、异步编程


JavaScript 是一种广泛应用于网页开发的编程语言,它能够为网页添加交互性和动态功能。

一、JavaScript 的基本概念

1. 什么是 JavaScript

JavaScript 是一种轻量级的脚本语言,主要用于网页开发,通过与 HTML 和 CSS 结合,实现网页的动态效果和用户交互功能。

2. JavaScript的发展历史

JavaScript起源于1995年,由Netscape公司的Brendan Eich设计并实现,最初名为Mocha,后更名为LiveScript,最终定名为JavaScript以借助Java的流行度。1997年,ECMA国际组织发布了ECMAScript标准,使JavaScript成为标准化的脚本语言。随后,JavaScript经历了多个版本的更新和改进,如ES3引入正则表达式和异常处理,ES5增加严格模式和JSON支持,而ES6则带来了块级作用域、箭头函数、类等现代化特性。如今,JavaScript已成为Web开发中不可或缺的一部分,广泛应用于前端开发、服务器端编程、游戏开发等多个领域。

3. JavaScript的特点

  • 解释性语言:JavaScript 是一种解释型语言,不需要编译,可以直接在浏览器中运行。这使得JavaScript的开发效率较高,同时降低了部署的复杂性,但也可能导致运行效率相对较低。不过,现代JavaScript引擎采用了即时编译(JIT)技术,大幅提高了运行效率。

  • 弱类型、动态类型语言:JavaScript是一种弱类型或动态类型语言,这意味着在声明变量时不需要指定数据类型,且变量的数据类型可以在运行时更改。这为开发者提供了极大的灵活性,但也增加了出错的可能性。

  • 面向对象:JavaScript 是一种基于对象的语言,支持面向对象编程(OOP)的三大特性:封装、继承和多态。然而,它并不完全遵循传统的类继承模式,而是通过原型链实现继承。

  • 事件驱动:JavaScript 是一种事件驱动的语言,能够响应用户的交互操作(如点击、拖拽等)或浏览器事件(如页面加载完成),这种事件驱动的机制使得JavaScript非常适合用于开发交互式网页应用。

  • 跨平台:JavaScript 可以在多种操作系统和设备上运行,包括桌面浏览器、移动设备和服务器端(通过 Node.js)。这种跨平台特性使得 JavaScript 成为一种非常通用的编程语言。

  • 轻量级:JavaScript 是一种轻量级的编程语言,其代码规模较小,运行速度快,不会对系统造成过多负担,这使得它非常适合用于网页开发。

  • 安全性:JavaScript 运行在沙盒环境中,限制了对本地文件和系统资源的访问,从而提高了安全性。但需要注意的是,JavaScript 无法直接访问本地硬盘或修改服务器数据。

  • 易用性:JavaScript 的语法简洁明了,可以直接嵌入到 HTML 页面中,与 HTML 和 CSS 协同工作,实现动态网页效果。

  • 丰富的库和框架:JavaScript拥有大量的第三方库和框架,如jQuery、React、Vue.js等,这些库和框架提供了丰富的功能和组件,极大地简化了开发过程,提高了开发效率。

  • 异步事件处理:JavaScript支持异步事件处理,允许程序在没有阻塞的情况下响应用户交互、网络请求等。这一点通过它的事件循环和回调机制得以实现,可以有效提升用户界面的响应速度和性能。

4. JavaScript 的用途

  • 前端开发:实现网页的动态效果(如动画、表单验证等)。

  • 后端开发:借助 Node.js,JavaScript 可以用于服务器端编程。

  • 移动应用开发:通过框架如 React Native 和 Ionic 开发跨平台移动应用。

二、JavaScript 的基础语法

1. 注释

注释用于提高代码的可读性和维护性,分为单行注释和多行注释:

  • 单行注释:以 // 开头。

  • 多行注释:以 /* 开始,以 */ 结束。

2. 变量声明

变量用于存储数据,JavaScript 中使用 varletconst 关键字声明变量:

  • var:变量作用域为函数作用域,可以重新声明。

  • let:变量作用域为块级作用域,不能重复声明。

  • const:声明常量,值不可更改。

命名规则:变量名只能包含字母(a-z, A-Z)、数字(0-9)、下划线(_)和美元符号($),第一个字符不能是数字,区分大小写。

3. 数据类型

JavaScript 提供多种数据类型,分为基本类型和引用类型:

  • 基本类型:NumberStringBooleanNullUndefinedSymbol

  • 引用类型:ObjectArrayFunction

4. 运算符

JavaScript 支持多种运算符,包括算术运算符、比较运算符、逻辑运算符等:

 let a = 10;let b = 20;​// 算术运算符let sum = a + b; // 加法let diff = a - b; // 减法let product = a * b; // 乘法let quotient = a / b; // 除法let remainder = a % b; // 取余let exponent = Math.pow(a, 2); // 指数​// 赋值运算符a += 5; // 等同于 a = a + 5​// 比较运算符let isEqual = a == b; // 等于(值比较,类型转换)let isStrictlyEqual = a === b; // 严格等于(值和类型都相同)​// 逻辑运算符let andResult = true && false; // 与let orResult = true || false; // 或let notResult = !true; // 非

5. 控制流语句

控制流语句用于控制程序的执行流程:

  • 条件语句if...elseswitch

  • 循环语句forwhiledo...while

 // if...else 示例let score = 85;if (score >= 90) {console.log("优秀");} else if (score >= 60) {console.log("及格");} else {console.log("不及格");}​// for 循环示例for (let i = 0; i < 5; i++) {console.log(i);}​// while 循环示例let j = 0;while (j < 5) {console.log(j);j++;}​// do...while 循环示例let k = 0;do {console.log(k);k++;} while (k < 5);

6. 输出语句

JavaScript 提供多种输出方式:

  • console.log():控制台输出。

  • alert():弹出警告框。

  • document.write():在 HTML 文档中写入内容。

7. 函数

函数是代码复用的重要方式:

 // 函数声明function greet(name) {console.log("Hello, " + name);}​// 函数调用greet("Tom"); // 输出 "Hello, Tom"

9. 数组

数组是一种特殊的对象类型,用于存储一系列的值。

 let arr = [1, 2, 3, 4, 5];​// 访问数组元素console.log(arr[0]); // 1​// 遍历数组for (let i = 0; i < arr.length; i++) {console.log(arr[i]);}​// 数组方法arr.push(6); // 添加元素到数组末尾arr.pop(); // 移除数组末尾的元素let firstElement = arr.shift(); // 移除数组开头的元素并返回arr.unshift(0); // 在数组开头添加元素console.log(arr); // [0, 2, 3, 4, 5, 6]

10. 对象

对象是 JavaScript 中的核心数据结构,由键值对组成。

 let person = {name: "Tom",age: 18,greet: function() {console.log("Hello, " + this.name);}};​console.log(person.name); // Tomperson.greet(); // Hello, Tom​// 添加属性person.gender = "female";​// 删除属性delete person.age;

三、DOM操作

1. DOM 概念

JavaScript 的 DOM(文档对象模型)操作是前端开发中非常重要的技术,它允许开发者通过编程方式动态地修改网页的内容、结构和样式。DOM 是一种标准的编程接口,用于描述 HTML 或 XML 文档的结构。文档被表示为树形结构,每个节点代表文档中的一个元素、属性或文本内容。通过 DOM,开发者可以访问和操作这些节点,从而实现动态网页效果。

2. DOM 操作的基本方法

DOM 提供了多种方法来操作文档,包括获取元素、修改元素内容、添加/删除元素以及操作样式等。

(1)获取元素

        通过 ID 获取元素
 var element = document.getElementById('myElementId');
        通过类名获取元素(返回 HTMLCollection)
 var elements = document.getElementsByClassName('myClassName');
        通过标签名获取元素(返回 HTMLCollection)
 var elements = document.getElementsByTagName('div');
        通过选择器获取元素(返回 NodeList)
 var element = document.querySelector('.myClassName'); // 第一个匹配的元素var elements = document.querySelectorAll('.myClassName'); // 所有匹配的元素

(2)修改元素内容

        修改文本内容
 element.textContent = '新的文本内容';
        修改 HTML 内容
 element.innerHTML = '<p>新的 HTML 内容</p>';

(3)修改元素属性

 element.setAttribute('title', '新的标题');var title = element.getAttribute('title'); // 获取属性值element.removeAttribute('title'); // 移除属性

(4)修改元素样式

        通过 style 对象修改样式
 element.style.color = 'red';element.style.fontSize = '20px';
        通过 className 修改样式
 element.className = 'newClassName'; // 替换 classelement.classList.add('newClassName'); // 添加 classelement.classList.remove('oldClassName'); // 移除 classelement.classList.toggle('className'); // 切换 class

(5)创建和插入元素

        创建新元素
 var newElement = document.createElement('div');newElement.textContent = '我是一个新元素';
        插入元素
 // 在父元素的末尾插入新元素parentElement.appendChild(newElement);// 在父元素的指定子元素之前插入新元素parentElement.insertBefore(newElement, existingChild);

(6)删除元素

 javascript复制代码​parentElement.removeChild(element);

(7)事件处理

        添加事件监听器
 element.addEventListener('click', function() {alert('元素被点击了!');});
        移除事件监听器
 function handleClick() {alert('元素被点击了!');}element.addEventListener('click', handleClick);element.removeEventListener('click', handleClick);

3. DOM 的性能优化

频繁的 DOM 操作可能会导致页面渲染性能下降。为了优化性能,可以采取以下措施:

  1. 减少不必要的 DOM 操作:尽量避免频繁修改 DOM,可以先将修改后的数据存储在变量中,最后一次性更新。

  2. 使用事件委托:通过父级元素监听子元素的事件,减少事件监听器的数量。

  3. 批量操作:将多个 DOM 操作合并为一次操作,避免多次触发浏览器的重排和重绘。

四、事件处理

JavaScript 通常用于处理用户事件,如点击、输入等。

 <!DOCTYPE html><html><head><title>Event Handling</title><script>function handleClick() {alert("Button clicked!");}window.onload = function() {document.getElementById("myButton").onclick = handleClick;};</script></head><body><button id="myButton">Click Me!</button></body></html>

五、ES6 新特性

ES6(ECMAScript 2015)引入了许多新特性,如箭头函数、模板字符串、解构赋值、类、模块等。

 // 模板字符串let name = "Alice";let greeting = `Hello, ${name}!`;console.log(greeting);// 解构赋值let person = { name: "Bob", age: 40 };let { name: personName, age: personAge } = person;console.log(personName, personAge);// 类class Rectangle {constructor(width, height) {this.width = width;this.height = height;}getArea() {return this.width * this.height;}}let rect = new Rectangle(5, 10);console.log(rect.getArea());

六、异步编程

JavaScript 支持多种异步编程方式,如回调函数、Promise 和 async/await。

 // 使用回调函数function fetchData(callback) {setTimeout(() => {let data = "Data fetched";callback(data);}, 1000);}fetchData((data) => {console.log(data); // Data fetched});​// 使用 Promiselet promise = new Promise((resolve, reject) => {setTimeout(() => {let success = true;if (success) {resolve("Data fetched successfully");} else {reject("Failed to fetch data");}}, 1000);});promise.then((data) => {console.log(data); // Data fetched successfully}).catch((error) => {console.error(error);});// 使用 async/awaitfunction fetchData() {return new Promise((resolve, reject) => {setTimeout(() => {let success = true;if (success) {resolve("Data fetched successfully");} else {reject("Failed to fetch data");}}, 1000);});}async function getData() {try {let data = await fetchData();console.log(data); // Data fetched successfully} catch (error) {console.error(error);}}getData();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14995.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大模型】硅基流动对接DeepSeek使用详解

目录 一、前言 二、硅基流动介绍 2.1 硅基流动平台介绍 2.1.1 平台是做什么的 2.2 主要特点与功能 2.2.1 适用场景 三、硅基流动快速使用 3.1 账户注册 3.2 token获取 3.2.1 获取token技巧 四、Cherry-Studio对接DeepSeek 4.1 获取 Cherry-Studio 4.2 Cherry-Stud…

DeepSeek之Win10系统部署教程

一、下载并安装Ollama 1、为什么要安装Ollama的呢&#xff1f; Ollama 是一个用于本地部署和管理大型语言模型&#xff08;LLM&#xff09;的工具&#xff0c;支持多种模型格式和框架。 它可以帮助用户轻松下载、配置和运行模型&#xff0c;同时提供统一的接口和依赖管理。 …

DeepSeek-r1和O1、O3mini谁更强?

DeepSeek-r1和O1、O3mini谁更强&#xff1f; 题目&#xff1a;编写一个 js 程序&#xff0c;显示一个球在旋转的六边形内弹跳。球应该受到重力和摩擦力的影响&#xff0c;并且必须逼真地从旋转的墙壁上弹起 DeepSeek-r1 <!DOCTYPE html> <html> <body> &l…

我用AI做数据分析之数据清洗

我用AI做数据分析之数据清洗 AI与数据分析的融合效果怎样&#xff1f; 这里描述自己在使用AI进行数据分析&#xff08;数据清洗&#xff09;过程中的几个小故事&#xff1a; 1. 变量名的翻译 有一个项目是某医生自己收集的数据&#xff0c;变量名使用的是中文&#xff0c;分…

如何搭建DeepSeek R1的训推环境?

本篇文章主要介绍基于Linux系统的Tesla A30 GPU的硬件环境搭建深度学习环境&#xff0c;为训练和推理DeepSeek R1 提供必要的环境&#xff0c;篇幅最后也会介绍到MIG的一些常见报错解决方案。 Anaconda安装 进入 https://www.anaconda.com/download/success 选择Linux安装包。…

模型压缩 --学习记录2

模型压缩 --学习记录2 如何找到更好的权衡方式(模型量化)方法一:寻找更好的 range方法二:寻找更好的 X-fp32(浮点数)方法三:寻找更好的 scale 和 zp方法四:寻找更好的 roundPTQ 后训练量化(离线量化)QAT 量化感知训练(在线量化)量化为什么会带来加速?三、模型稀疏技…

Unity3D仿星露谷物语开发28之切换场景

1、目标 Player可以在Scene1_Farm和Scene2_Field之间自动切换。通过Trigger实现该功能。同时创建一个预设体绑定该功能&#xff0c;这样可以把预设体放到任何场景中&#xff0c;通过配置即可实现Player在Scene之间的自由切换。 2、创建场景切换的工具对象 在Hierarchy中&…

Maven插件—flatten-maven-plugin:工程模块统一版本依赖

文章目录 前言一、认识flatten-maven-plugin插件二、如何使用flatten-maven-plugin插件&#xff1f;未使用flatten-maven-plugin插件之前的情况描述配置flatten-maven-plugin插件步骤1&#xff1a;最外层父模块安装插件&配置版本变量步骤2&#xff1a;各个自模块使用版本使…

并查集题目

并查集题目 聚合一块&#xff08;蓝桥&#xff09;合根植物&#xff08;蓝桥&#xff09;等式方程的可满足性省份数量 并查集&#xff08;Union-Find&#xff09;算法是一个专门针对「动态连通性」的算法。双方向的连通。 模板&#xff1a; class UF {// 连通分量个数private …

【玩转 Postman 接口测试与开发2_019】第15章:利用 Postman 初探 API 性能测试(含实战截图)

《API Testing and Development with Postman》最新第二版封面 文章目录 第十五章 API 接口性能测试1 性能负载的类型2 Postman 负载配置3 Postman 性能测试实战3.1 Fixed 型负载下的性能测试3.2 基于数据驱动的 Postman 接口性能测试 4 性能测试的注意事项 写在前面 终于来到了…

Linux(20)——调度作业

目录 一、调度延迟的用户作业&#xff1a; 1、延迟的用户作业&#xff1a; 2、查看延迟的用户作业&#xff1a; 3、从计划中删除作业&#xff1a; 二、调度周期性用户作业&#xff1a; 1、周期性用户作业&#xff1a; 2、调度周期性用户作业&#xff1a; 3、用户作业格…

在 Visual Studio Code 与微信开发者工具中调试使用 emscripten 基于 C 生成的 WASM 代码

最近在尝试将一些 C/C、Lua 项目挪到 Web 上跑, 接触到了 emscripten. 这里会介绍下在 Visual Studio Code 与微信开发者工具中调试使用 emscripten 基于 C 生成的 WASM 代码 (WebAssembly) 的一些方法. Emscripten 与 WebAssebmly WebAssembly 是一种新的编码方式, 可以在现代…

deepseek API开发简介

1、申请deepseek api key&#xff1a; https://platform.deepseek.com/api_keys创建API Key&#xff0c;并复制Key 2、安装python、pip&#xff0c;然后安装requests pip install requests3、.示例代码 import requests import json# DeepSeek API 地址 API_URL "ht…

uniapp开发微信小程序请求超时设置【亲测有效】

在Hbuilderx中 使用uniapp开发微信小程序时 封装请求方法 请求代码如下 function requestFun(app) {// get请求app.config.globalProperties._get function(path, data, success, fail, complete) {data data || {};data.token uni.getStorageSync(token) || ;uni.request…

【03】 区块链分布式网络

3-1 P2P网络 传统中心化网络由中央服务器保存全量数据。客户端之间无法直接连接&#xff0c;必须通过中央服务器作为桥梁。客户端必须和中央服务器建立连接后访问资源。客户端之间并无连通。 在P2P网络中通过将数据资源分散在网络各个节点中存储以及节点间交互连接&#xff0…

DeepSeek-R1 论文解析——人工智能领域的 RL LLM 新时代?

简介 最近几年&#xff0c;AI领域真是突飞猛进&#xff0c;尤其是大型语言模型&#xff08;LLM&#xff09;&#xff0c;它们为通用人工智能&#xff08;AGI&#xff09;的发展打下了基础。OpenAI的o1模型就是个很好的例子&#xff0c;它用了一种创新的推理时间扩展技术&#…

第七节 文件与流

基本的输入输出&#xff08;iostream&#xff09; C标准库提供了一组丰富的输入/输出功能&#xff0c;C的I/O发生在流中&#xff0c;流是字节序列。如果字节流是从设备&#xff08;键盘、磁盘驱动器、网络连接等&#xff09;流向内存&#xff0c;叫做输入操作。如果字节流是从…

算法篇——动态规划

核心思想&#xff1a; 将问题分解为重叠的子问题&#xff0c;并储存子问题的解&#xff08;使用字典、数组或哈希表&#xff09;&#xff0c;避免重复计算&#xff0c;从而提高效率。 题目特点&#xff1a;重叠子问题&#xff08;特殊地&#xff0c;是最优子结构&#xff09; …

redis高级数据结构Stream

文章目录 背景stream概述消息 ID消息内容常见操作独立消费创建消费组消费 Stream弊端Stream 消息太多怎么办?消息如果忘记 ACK 会怎样?PEL 如何避免消息丢失?分区 Partition Stream 的高可用总结 背景 为了解决list作为消息队列是无法支持消息多播问题&#xff0c;Redis5.0…

ASP.NET Core WebSocket、SignalR

目录 WebSocket SignalR SignalR的基本使用 WebSocket WebSocket基于TCP协议&#xff0c;支持二进制通信&#xff0c;双工通信。性能和并发能力更强。WebSocket独立于HTTP协议&#xff0c;不过我们一般仍然把WebSocket服务器端部署到Web服务器上&#xff0c;因为可以借助HT…