前端(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.rhkb.cn/news/471944.html

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

相关文章

使用阿里云快速搭建 DataLight 平台

使用阿里云快速搭建 DataLight 平台 本篇文章由用户 “闫哥大数据” 分享&#xff0c;B 站账号&#xff1a;https://space.bilibili.com/357944741?spm_id_from333.999.0.0 注意&#xff1a;因每个人操作顺序可能略有区别&#xff0c;整个部署流程如果出现出入&#xff0c;以…

H.265流媒体播放器EasyPlayer.js H.264/H.265播放器chrome无法访问更私有的地址是什么原因

EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、HTTP-FLV、HLS&#xff08;m3u8&#xff09;、WS、WEBRTC、FMP4视频直播与视频点播等多种协议&#xff0c;支持H.264、H.265、AAC、G711A、MP3等多种音视频编码格式&#xff0c;支持MSE、WASM、WebCodec等多种解码方…

QT_CONFIG宏使用

时常在Qt代码中看到QT_CONFIG宏&#xff0c;之前以为和#define、DEFINES 差不多&#xff0c;看了定义才发现不是那么回事&#xff0c;定义如下&#xff1a; 看注释就知道了QT_CONFIG宏&#xff0c;其实是&#xff1a;实现了一个在编译时期安全检查&#xff0c;检查指定的Qt特性…

centos7安装Chrome使用selenium-wire

背景&#xff1a;在centos7中运行selenium-wire爬虫&#xff0c;系统自带的Firefox浏览器不兼容&#xff0c;运行报错no attribute ‘set_preference’&#xff0c;应该是selenium-wire和Firefox的驱动不兼容 查了半天不知道怎么解决&#xff0c;就想在centos7上安装Chrome来跑…

医院信息化与智能化系统(21)

医院信息化与智能化系统(21) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应…

《FreeRTOS任务控制块篇》

Task control block, 即任务控制块。任务控制块&#xff08;TCB&#xff09;是一个结构体&#xff0c;它会分配给每个任务&#xff0c;其中存储着任务的状态信息&#xff0c;包括指向任务上下文&#xff08;任务的运行时环境&#xff0c;包括寄存器值&#xff09;的指针。任务控…

Queuing 表(buffer表)的优化实践 | OceanBase 性能优化实践

案例问题描述 该案例来自一个金融行业客户的问题&#xff1a;他们发现某个应用对一个数据量相对较小的表&#xff08;仅包含数千条记录&#xff09;访问时&#xff0c;频繁遇到性能下降的情况。为解决此问题&#xff0c;客户向我们求助进行分析。我们发现这张表有频繁的批量插…

ssh登陆服务器后支持Tab键命令补全

在服务器上新建了用户后&#xff0c;通过ssh登录到服务器后发现不能使用Tab键来进行命令补全 截图如下&#xff1a; 以为没有配置.bashrc 此时输入 source 发现无此命令 细心的可以发现 -sh 于是输入命令echo $SHELL 确认此时的shell为sh&#xff0c; 只要输入命令bash即可切…

[白月黑羽]关于仿写类postman功能软件题目的解答

原题&#xff1a; 答&#xff1a; python文件如下 from PySide6.QtWidgets import QApplication, QMessageBox,QTableWidgetItem,QHeaderView,QWidget,QTableWidget from PySide6.QtCore import QEvent,QObject from PySide6.QtUiTools import QUiLoader import time import …

Postman接口测试(断言、关联、参数化、输出测试报告)

基本界面展示 Get、Post请求 Postman断言 使用postman来判断预期结果与实际结果是否一致 响应状态码断言 响应包含字符串 断言判断字符串的格式 关联 用于解决http请求之间存在依赖关系 依赖&#xff1a;一个http请求的响应结果中的数据&#xff0c;被另一个请求使用 登…

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter)

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现&#xff08;Kalman Filter&#xff09; 更新以gitee为准&#xff1a; gitee地址 文章目录 卡尔曼滤波数据融合Python实现C语言实现多个数据如何融合附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Pac…

网络原理-网络层和数据链路层

一、网络层 1、IP协议完成的工作 地址管理&#xff1a;使用一套地址体系来描述所没备的位置 路由选择&#xff1a;一个数据包如何从网络的某个地址传到另一个地址 2、IP报头 4 位版本号&#xff1a;取值为4或6 (IPv4/IPv6) 4 位首部长度&#xff1a;IP报头&#xff0c;单位…

【Three.js基础学习】22.New project structure

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 这里将使用全新的项目结构&#xff0c;将不同工具分层&#xff0c;区分开使用。 一、结构目录 二、对应文件 1.script.js 获取画布&#xff0c;引入样式和功能。 /* 课…

AI风向标|算力与通信的完美融合,SRM6690解锁端侧AI的智能密码

当前&#xff0c;5G技术已经成为推动数字经济和实体经济深度融合的关键驱动力&#xff0c;进入5G发展的下半场&#xff0c;5G与AI的融合正推动诸多行业的数字化转型和创新发展&#xff0c;终端侧AI和端云混合式AI将广泛应用于各类消费终端和各行各业。 在推动5G和AI与各行业场…

【WPF】Prism学习(二)

Prism Commands 1.命令&#xff08;Commanding&#xff09; 1.1. ViewModel的作用&#xff1a; ViewModel不仅提供在视图中显示或编辑的数据&#xff0c;还可能定义一个或多个用户可以执行的动作或操作。这些用户可以通过用户界面&#xff08;UI&#xff09;执行的动作或操作…

智慧建造-运用Trimble技术将梦幻水族馆变为现实【上海沪敖3D】

项目概述 西雅图水族馆耗资1.6亿美元对海洋馆进行扩建。该项目包括建造三个大型栖息地&#xff0c;每个建筑物几乎都没有直边&#xff0c;其中一个主栖息地由520立方米混凝土和355吨钢筋组成。特纳建筑公司的混凝土团队通过强大的贸易合作伙伴和创新的数字制造技术&#xff0c;…

kubesphere环境-本地Harbor仓库+k8s集群(单master 多master)+Prometheus监控平台部署

前言&#xff1a;半月前在公司生产环境上离线部署了k8s集群Victoria Metrics(二开版)自研版夜莺 监控平台的搭建&#xff0c;下面我租用3台华为云服务器演示部署kubesphere环境-本地Harbor仓库k8s集群&#xff08;单master节点 & 单master节点&#xff09;Prometheus监控部…

java 随机生成验证码

1.需求 实现随机生成验证码&#xff0c;验证码可能是大小写字母和数字 2.实现 写一个getCode方法实现 public static String getCode(int n){//1. 定义一个字符串&#xff0c;字符串中包含大小写字母和数字String str "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrs…

Unity图形学之Blend指令

1.渲染流程&#xff1a;Blend 决定了要渲染的像素和Gbuffer里像素到底怎么取舍 2.Blend 公式&#xff1a; 3.factor可以取值的内容有&#xff1a; One 1 Zero :0 SrcColor : 要渲染的像素 SrcAlpha : 要渲染像素的 a 通道。 DstColor &#xff1a; 已经渲染在gbuffer…

林曦词典|养生

“林曦词典”是在水墨画家林曦的课堂与访谈里&#xff0c;频频邂逅的话语&#xff0c;总能生发出无尽的思考。那些悠然轻快的、微妙纷繁的&#xff0c;亦或耳熟能详的词&#xff0c;经由林曦老师的独到解析&#xff0c;意蕴无穷&#xff0c;让人受益。于是&#xff0c;我们将诸…