前端(3)——快速入门JaveScript

参考:

罗大富

JavaScript 教程 | 菜鸟教程

JavaScript 教程


1. JaveScript

JavaScript 简称 JS
  • JavaScript 是一种轻量级、解释型、面向对象的脚本语言。它主要被设计用于在网页上实现动态效果,增加用户与网页的交互性。
  • 作为一种客户端脚本语言,JavaScript 可以直接嵌入 HTML,并在浏览器中执行。
  • 与 HTML和 CSS 不同,JavaScript 使得网页不再是静态的,而是可以根据用户的操作动态变化的。

JavaScript 的作用:

  • 客户端脚本:用于在用户浏览器中执行,实现动态效果和用户交互,
  • 与 HTML和 CSS 协同工作,使得网页具有更强的交互性和动态性。网页开发
  • 使用 Node.js,JavaScript 也可以在服务器端运行,实现服务器端应用的开发后端开发:

1.1 JS的导入方式

JS有常见的三种导入方式:1)在HEAD标签内导入;2)在body标签内导入;3)外联导入(需创建一个js格式的文件)

这三种方式均需配合script标签一起使用,我们这里在scripe标签内使用consolelog函数,展示这三种方式:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS导入方式</title><script>console.log('Hello, HEAD标签的内联样式');</script><script src="./myscript.js"></script>
</head>
<body><h1>JaveScript 的导入方式</h1><script>console.log('Hello, body标签的内联样式');alert("你好,内联样式弹窗")</script>
</body>
</html>

myscript.js文件内容如下:

console.log('Hello, 外联样式');

我们可以在浏览器页面中点击F12,进入console查看日志:

很明显,导入成功。

此外,我们可以在script标签内做其他尝试,比如我这里使用alert函数弹出一个弹窗,显示“你好,内联样式弹窗”:

    <script>console.log('Hello, body标签的内联样式');alert("你好,内联样式弹窗")</script>

1.2 JS的基本语法

1.2.1 JS的变量和数据类型

JavaScript 使用 varlet 和 const 来声明变量。

  • var:声明一个变量,使用 var 声明的变量会有函数作用域或全局作用域,容易导致一些问题,现已较少使用。
  • let:声明一个块级作用域的变量。
  • const:声明一个常量,值不可改变。
<script>var x;let name = 'Alice';  // 变量可以重新赋值const age = 25;      // 常量,不可修改console.log(x,name,age);
</script>

我们可以调用console的log函数查看这些值:

    <script>var x;let name = 'Alice';  // 变量可以重新赋值const age = 25;      // 常量,不可修改console.log(x,name,age);let y = '示例';console.log(y);let empty_value = null;console.log(empty_value);</script>


JavaScript 有多种数据类型,主要分为两类:基本类型(原始类型)和引用类型。

  • 基本类型(Primitive types):
    • number:数字类型
    • string:字符串类型
    • boolean:布尔类型(true 或 false
    • null:空值
    • undefined:未定义的值
    • symbol:唯一标识符(ES6 引入)
    • bigint:大整数(ES11 引入)
  • 引用类型(Reference types):
    • object:对象
    • array:数组
    • function:函数(也是对象)
let num = 100;           // number
let name = 'Alice';      // string
let isActive = true;     // boolean
let person = { name: 'Alice', age: 25 };  // object

1.2.2 JS的控制语句

JavaScript 使用 ifelseelse if 来进行条件判断。

let age = 18;
if (age >= 18) {console.log('成年人');
} else {console.log('未成年人');
}

还可以使用 switch 语句进行多分支判断:

let day = 3;
switch(day) {case 1:console.log('星期一');break;case 2:console.log('星期二');break;case 3:console.log('星期三');break;default:console.log('未知');
}

JavaScript 支持 forwhiledo...while 等循环语句。

  • for 循环
for (let i = 0; i < 5; i++) {console.log(i);  // 输出 0 到 4
}
  • while 循环
let i = 0;
while (i < 5) {console.log(i);  // 输出 0 到 4i++;
}
  • do...while 循环
let i = 0;
do {console.log(i);  // 输出 0 到 4i++;
} while (i < 5);

1.2.3 JS的函数

在 JavaScript 中,函数可以通过函数声明或函数表达式定义。

  • 函数声明
function greet(name) {console.log('Hello, ' + name);
}
greet('Alice');  // 调用函数
  • 函数表达式
let greet = function(name) {console.log('Hello, ' + name);
};
greet('Bob');  // 调用函数
  • 箭头函数(ES6 引入):
let greet = (name) => {console.log('Hello, ' + name);
};
greet('Charlie');

1.2.4 JS的数组与对象

数组:用于存储多个值,索引从 0 开始。

let fruits = ['apple', 'banana', 'cherry'];
console.log(fruits[0]);  // 输出 'apple'

对象:用于存储具有键值对的数据。

let person = {name: 'Alice',age: 25
};
console.log(person.name);  // 输出 'Alice'

1.2.5 JS事件处理

JavaScript 事件处理是指在用户与网页元素交互时,浏览器响应并执行相应的 JavaScript 代码的机制。事件处理是前端开发中的一个重要部分,涉及到如何让网页响应用户的点击、输入、键盘操作、鼠标移动等行为。

1.2.5.1 事件的基本概念

事件(Event)是用户与网页交互时产生的动作。每当用户与网页元素进行交互时,都会触发一个事件。常见的事件包括:

  • 鼠标事件click(点击)、dblclick(双击)、mouseover(鼠标悬停)、mouseout(鼠标离开)
  • 键盘事件keydown(按下键盘)、keyup(松开键盘)、keypress(按下字符键)
  • 表单事件submit(提交表单)、input(输入框变化)、change(元素内容变化)
  • 窗口事件load(页面加载完成)、resize(窗口大小调整)、scroll(滚动)

1.2.5.2 事件处理的基本方式

a. 内联事件处理

最简单的事件处理方法是直接在 HTML 标签中使用事件属性。例如:

<button onclick="alert('按钮被点击了')">点击我</button>

这种方法将事件处理程序直接嵌入到 HTML 标签的 onclick 属性中。尽管它使用方便,但通常不推荐这种做法,因为它将行为与结构混合在一起,难以维护。

b. 通过 JavaScript 事件处理程序

通常,我们更倾向于使用 JavaScript 来处理事件,而不是在 HTML 中内联定义。这样可以将事件的处理逻辑与 HTML 内容分离,使代码更加清晰和可维护。

<button id="myButton">点击我</button>
​
<script>let button = document.getElementById('myButton');button.onclick = function() {alert('按钮被点击了');};
</script>

这里我们使用 onclick 属性将事件处理程序绑定到按钮元素。当按钮被点击时,事件处理程序会被触发并执行。

c. 使用 addEventListener 方法

addEventListener 是现代 JavaScript 中最推荐的事件绑定方法。它允许你向一个元素添加多个事件监听器,而不会覆盖已有的事件监听器。使用这种方法,可以更加灵活地控制事件的处理方式。

<button id="myButton">点击我</button>
​
<script>let button = document.getElementById('myButton');// 使用 addEventListener 绑定事件button.addEventListener('click', function() {alert('按钮被点击了');});
</script>

d. removeEventListener 方法

如果需要在某些条件下移除已经绑定的事件处理程序,可以使用 removeEventListener 方法。此方法与 addEventListener 相对应,移除之前通过 addEventListener 绑定的事件监听器。

<button id="myButton">点击我</button>
<button id="removeButton">移除点击事件</button>
​
<script>let button = document.getElementById('myButton');let removeButton = document.getElementById('removeButton');function handleClick() {alert('按钮被点击了');}button.addEventListener('click', handleClick);removeButton.addEventListener('click', function() {button.removeEventListener('click', handleClick);alert('事件已被移除');});
</script>

1.2.5.3 事件对象

当事件被触发时,浏览器会生成一个事件对象(event),该对象包含了有关事件的所有信息,如触发事件的元素、事件类型、键盘按键等。可以通过事件处理程序访问该对象。

<button id="myButton">点击我</button>
<script>let button = document.getElementById('myButton');button.addEventListener('click', function(event) {console.log(event); // 输出事件对象的详细信息console.log('事件的目标元素:', event.target);console.log('鼠标点击的坐标:', event.clientX, event.clientY);});
</script>

常用的事件对象属性:

  • event.target:触发事件的元素。
  • event.type:事件的类型(例如 clickmouseover 等)。
  • event.clientX 和 event.clientY:鼠标相对于浏览器窗口的坐标。
  • event.key:在键盘事件中,返回按下的键的名称(例如 'Enter''A')。

1.2.5.4 事件冒泡与事件捕获

JavaScript 中的事件传播机制有两种方式:事件冒泡事件捕获

  • 事件冒泡:事件从目标元素冒泡到父元素。即,事件首先在目标元素上触发,然后依次向上冒泡到祖先元素,直到最顶层的 document
    例如,在一个 <div> 内的 <button> 上点击时,button 的点击事件会先被触发,然后事件会冒泡到外部的 div 元素。
  • 事件捕获:事件从最外层的父元素开始捕获,直到目标元素。捕获阶段会先触发父元素的事件处理程序,然后才是目标元素的事件处理程序。

可以通过 addEventListener 的第三个参数来控制事件是处于冒泡阶段还是捕获阶段:

element.addEventListener('click', function(event) {console.log('捕获阶段');
}, true); // true 表示捕获阶段,false 或不传参数表示冒泡阶段

1.2.5.5 事件委托

事件委托是通过在父元素上绑定事件,而不是在每个子元素上绑定事件,来优化性能的一种技巧。特别是在处理动态生成的元素时,事件委托非常有用。

例如,假设你有一个列表,里面包含了多个按钮,传统方法会给每个按钮单独绑定事件。但使用事件委托,只需要在父元素上绑定一个事件处理程序即可。

html复制代码<ul id="list"><li><button>按钮 1</button></li><li><button>按钮 2</button></li><li><button>按钮 3</button></li>
</ul>
​
<script>let list = document.getElementById('list');list.addEventListener('click', function(event) {if (event.target.tagName === 'BUTTON') {alert(event.target.textContent);  // 显示按钮的文本内容}});
</script>

1.3 DOM

在 Web 开发中,DOM 通常与 JavaScript 一起使用。

  • 当网页被加载时,浏览器会创建页面的文档对象模型,也就是DOM(Document Object Model)。
  • 每个 HTML 或 XML 文档都可以被视为一个文栏树,文档树是整个文档的层次结构表示。
  • 文档节点是整个文档树的根节点。
  • DOM 为这个文档树提供了一个编程接口,开发者可以使用 JavaScript 来操作这个树状结构。

一个节点树如上图所示。

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

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

相关文章

FRP 实现内网穿透

如何通过 FRP 实现内网穿透&#xff1a;群晖 NAS 的 Gitea 和 GitLab 访问配置指南 在自建服务的过程中&#xff0c;经常会遇到内网访问受限的问题。本文将介绍如何利用 FRP&#xff08;Fast Reverse Proxy&#xff09;来实现内网穿透&#xff0c;以便在外网访问群晖 NAS 上的…

我们来学mysql -- EXPLAIN之select_type(原理篇)

EXPLAIN之select_type 题记select_type 题记 书接上文《 EXPLAIN之ID》2024美国大选已定&#xff0c;川普剑登上铁王座&#xff0c;在此过程中出谋划策的幕僚很重要&#xff0c;是他们决定了最终的执行计划在《查询成本之索引选择》中提到&#xff0c;explain的输出&#xff0…

uni-app快速入门(五)--判断运行环境及针对不同平台的条件编译

一、判断运行环境 在实际项目开发中&#xff0c;经常需要进行开发环境和生产环境的切换&#xff0c;uni-app可根据process.env.NODE_ENV判断当前运行环境是开发环境和生产环境&#xff0c;根据不同的环境调用不同的后台接口&#xff0c;具体实现方式: 在项目的static目录下建…

北京大学c++程序设计听课笔记101

基本概念 程序运行期间&#xff0c;每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址&#xff08;也称“入口地址”&#xff09;。我们可以将函数的入口地址赋给一个指针变量&#xff0c;使该指针变量指向该函数。然后通过指针变量就可以调用这个…

构建客服知识库:企业效率提升的关键步骤

客服知识库是企业提升客户服务效率和质量的重要工具。它不仅帮助客服团队快速准确地回答客户问题&#xff0c;还能通过数据分析来优化服务流程和提升客户满意度。 1. 明确知识库的目标和范围 构建客服知识库的第一步是明确其目标和范围。这包括确定知识库的主要用户群体、需要…

Linux运维工程师推荐学习的开发语言

前言&#xff1a;会开发的运维和不会开发的运维可以说是两个世界的运维。 个人推荐python和go&#xff0c;前者可以做自动化运维&#xff0c;后者可以深挖k8s&#xff1b;最近就不先演示运维服务技术的部署和架构搭建了&#xff0c;在深挖自动化运维&#xff0c;为了让现在的工…

整合seata遇到的问题

自己遇到的问题&#xff0c;记录一下。 1、版本问题 我seata用的是1.7&#xff0c; 数据库驱动是 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.31</version><scope>…

从零到一:利用 AI 开发 iOS App 《震感》的编程之旅

在网上看到一篇关于使用AI开发的编程经历&#xff0c;分享给大家 作者是如何在没有 iOS 开发经验的情况下&#xff0c;借助 AI&#xff08;如 Claude 3 模型&#xff09;成功开发并发布《震感》iOS 应用。 正文开始 2022 年 11 月&#xff0c;ChatGPT 诞生并迅速引发全球关注。…

.netcore + postgis 保存地图围栏数据

一、数据库字段 字段类型选择(Type) 设置对象类型为&#xff1a;geometry 二、前端传递的Json格式转换 前端传递围栏的各个坐标点数据如下&#xff1a; {"AreaRange": [{"lat": 30.123456,"lng": 120.123456},{"lat": 30.123456…

系统掌握大语言模型提示词 - 从理论到实践

以下是我目前的一些主要个人标签&#xff1a; 6 年多头部大厂软件开发经验&#xff1b;1 年多 AI 业务应用经验&#xff0c;拥有丰富的业务提示词调优经验和模型微调经验。信仰 AGI&#xff0c;已经将 AI 通过自定义 Chatbot /搭建 Agent 融合到我的工作流中。头部大厂技术大学…

k8clone二进制工具迁移k8s中的无状态应用

1 概述 k8clone是一个简便的Kubernetes元数据克隆工具&#xff0c;它可以将Kubernetes元数据&#xff08;对象&#xff09;保存为本地压缩包&#xff0c;在恢复时可将这些元数据恢复到目标集群中&#xff08;已存在的资源不会被覆盖&#xff09;。它不依赖远程存储&#xff0c…

IDC 报告:百度智能云 VectorDB 优势数量 TOP 1

近日&#xff0c;IDC 发布了《RAG 与向量数据库市场前景预测》报告&#xff0c;深入剖析了检索增强生成&#xff08;RAG&#xff09;技术和向量数据库市场的发展趋势。报告不仅绘制了 RAG 技术的发展蓝图&#xff0c;还评估了市场上的主要厂商。在这一评估中&#xff0c;百度智…

计算机毕业设计Python+CNN卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Nginx SSL+tomcat,使用request.getScheme() 取到https协议

架构上使用了 Nginx tomcat 集群, 且nginx下配置了SSL,tomcat no SSL,项目使用https和http协议。 发现 request.getScheme() //总是 http&#xff0c;而不是实际的http或https request.isSecure() //总是false&#xff08;因为总是http&#xff09; request.getRemoteAddr(…

机器学习 ---线性回归

目录 摘要&#xff1a; 一、简单线性回归与多元线性回归 1、简单线性回归 2、多元线性回归 3、残差 二、线性回归的正规方程解 1、线性回归训练流程 2、线性回归的正规方程解 &#xff08;1&#xff09;适用场景 &#xff08;2&#xff09;正规方程解的公式 三、衡量…

蓝桥杯c++算法学习【3】之思维与贪心(重复字符串、翻硬币、乘积最大、皮亚诺曲线距离【难】:::非常典型的必刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 思维与贪心 一、重复字符串 【问题描述】 如果一个字符串S恰好可以由某个字符串重复K次得到&#xff0c;我们就称S是K次重复字 符串…

Vue3 -- 基于Vue3+TS+Vite项目【项目搭建及初始化】

兼容性注意&#xff1a; Vite 需要 Node.js 版本 18 或 20。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本。【摘抄自vite官网】 这里我用的node版本是 v18.20.2 创建项目&#xf…

计算机网络中的域名系统(DNS)及其优化技术

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机网络中的域名系统&#xff08;DNS&#xff09;及其优化技术 计算机网络中的域名系统&#xff08;DNS&#xff09;及其优化…

STM32单片机CAN总线汽车线路通断检测

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着汽车电子技术的不断发展&#xff0c;车辆通信接口在汽车电子控…

(实战)WebApi第13讲:怎么把不同表里的东西,包括同一个表里面不同的列设置成不同的实体,所有的给整合到一起?【前端+后端】、前端中点击标签后在界面中显示

一、实现全局跨域&#xff1a;新建一个Controller&#xff0c;其它的controller都继承它 1、新建BaseController 2、在后端配置&#xff0c;此处省略【详情见第12讲四、3、】 3、其它的控制器继承BaseController&#xff0c;这个时候就能够完成全局的跨域 【向后台传cookie和…