JavaScript快速入门指南
JavaScript是一种广泛应用于网页开发的脚本语言,它可以让网页实现动态效果和交互性。无论是前端开发还是全栈开发,JavaScript都是不可或缺的一部分。本文将带你快速入门JavaScript,从基础语法到实际应用,让你快速上手这门强大的语言。
一、JavaScript简介
JavaScript最初由Netscape的Brendan Eich在1995年创建,起初名为Mocha,后来改名为LiveScript,最终在发布前定名为JavaScript。JavaScript是一种解释性的脚本语言,它是HTML和Web的核心技术之一,为网页提供交互性和动态功能。
JavaScript可以在HTML文档中直接使用,也可以用在服务器端(如Node.js环境),用途非常广泛。
二、基础语法
1. 变量和数据类型
JavaScript是一种动态类型语言,你不需要提前声明变量的类型。可以使用var、let、const来声明变量。
javascript
| var name = "John"; | |
| let age = 30; | |
| const PI = 3.14; |
JavaScript中的数据类型包括:
- 字符串(String)
- 数字(Number)
- 布尔(Boolean)
- 对象(Object)
- 函数(Function)
- 空(Null)
- 未定义(Undefined)
2. 操作符
JavaScript中的操作符包括算术操作符(+, -, *, /等)、比较操作符(==, !=, >, <等)、逻辑操作符(&&, ||, !等)和赋值操作符(=)。
javascript
| let x = 5; | |
| let y = 2; | |
| console.log(x + y); // 输出 7 | |
| console.log(x > y); // 输出 true |
3. 控制结构
JavaScript中的控制结构包括if语句、switch语句、for循环、while循环等。
javascript
| if (x > y) { | |
| console.log("x is greater than y"); | |
| } else { | |
| console.log("x is not greater than y"); | |
| } | |
| for (let i = 0; i < 5; i++) { | |
| console.log(i); | |
| } |
4. 函数
函数是JavaScript中的基本组件之一,用于执行特定任务。
javascript
| function greet(name) { | |
| console.log("Hello, " + name + "!"); | |
| } | |
| greet("Alice"); // 输出 "Hello, Alice!" |
三、DOM操作
JavaScript的一个重要用途是操作HTML文档的内容、结构和样式。通过DOM(Document Object Model),你可以访问和修改网页的内容。
javascript
| // 获取元素 | |
| let element = document.getElementById("demo"); | |
| // 修改内容 | |
| element.innerHTML = "Hello, JavaScript!"; | |
| // 修改样式 | |
| element.style.color = "blue"; |
四、事件处理
JavaScript可以响应用户的操作,如点击、滚动、按键等。通过事件处理,你可以创建交互式的网页。
javascript
| document.getElementById("demo").onclick = function() { | |
| alert("You clicked me!"); | |
| }; |
五、Ajax
Ajax(Asynchronous JavaScript and XML)是一种技术,用于在网页中实现异步数据交换,可以在不重新加载整个页面的情况下更新部分网页的内容。
javascript
| let xhr = new XMLHttpRequest(); | |
| xhr.open("GET", "https://api.example.com/data", true); | |
| xhr.onreadystatechange = function() { | |
| if (xhr.readyState == 4 && xhr.status == 200) { | |
| console.log(xhr.responseText); | |
| } | |
| }; | |
| xhr.send(); |
六、ES6及更高版本的新特性
ES6(ECMAScript 2015)及更高版本引入了许多新特性,如模板字符串、箭头函数、Promise、async/await等,这些新特性大大增强了JavaScript的功能和易用性。
javascript
| // 模板字符串 | |
| let name = "Bob"; | |
| console.log(`Hello, ${name}!`); | |
| // 箭头函数 | |
| let greet = name => console.log(`Hello, ${name}!`); | |
| greet("Eve"); | |
| // async/await | |
| async function fetchData() { | |
| let response = await fetch("https://api.example.com/data"); | |
| let data = await response.json(); | |
| console.log(data); | |
| } | |
| fetchData(); |
七、实战:构建一个简单的待办事项应用
下面,我们将使用HTML、CSS和JavaScript构建一个简单的待办
事项应用。这个应用将允许用户添加新的待办事项,并标记它们为已完成或删除它们。
1. HTML结构
首先,我们需要创建一个简单的HTML结构来容纳我们的待办事项列表。
html
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>待办事项应用</title> | |
| <link rel="stylesheet" href="styles.css"> | |
| </head> | |
| <body> | |
| <h1>我的待办事项</h1> | |
| <input type="text" id="newTodo" placeholder="添加新的待办事项"> | |
| <button onclick="addTodo()">添加</button> | |
| <ul id="todoList"></ul> | |
| <script src="script.js"></script> | |
| </body> | |
| </html> |
2. CSS样式
接下来,我们添加一些基本的CSS样式来美化我们的应用。
css
| /* styles.css */ | |
| body { | |
| font-family: Arial, sans-serif; | |
| } | |
| #todoList { | |
| list-style-type: none; | |
| padding: 0; | |
| } | |
| #todoList li { | |
| padding: 8px; | |
| margin-top: 5px; | |
| background-color: #f9f9f9; | |
| border: solid 1px #ddd; | |
| } | |
| #todoList li.completed { | |
| background-color: #e9e9e9; | |
| text-decoration: line-through; | |
| } |
3. JavaScript逻辑
最后,我们添加JavaScript逻辑来处理待办事项的添加、标记完成和删除。
javascript
| // script.js | |
| let todos = []; | |
| function addTodo() { | |
| let todoText = document.getElementById('newTodo').value.trim(); | |
| if (todoText) { | |
| todos.push({ | |
| text: todoText, | |
| completed: false | |
| }); | |
| renderTodoList(); | |
| document.getElementById('newTodo').value = ''; | |
| } | |
| } | |
| function renderTodoList() { | |
| let todoList = document.getElementById('todoList'); | |
| todoList.innerHTML = ''; | |
| todos.forEach((todo, index) => { | |
| let todoEl = document.createElement('li'); | |
| todoEl.textContent = todo.text; | |
| if (todo.completed) { | |
| todoEl.classList.add('completed'); | |
| } | |
| todoEl.onclick = function() { | |
| toggleTodoCompletion(index); | |
| }; | |
| let deleteButton = document.createElement('button'); | |
| deleteButton.textContent = '删除'; | |
| deleteButton.onclick = function() { | |
| deleteTodo(index); | |
| }; | |
| todoEl.appendChild(deleteButton); | |
| todoList.appendChild(todoEl); | |
| }); | |
| } | |
| function toggleTodoCompletion(index) { | |
| todos[index].completed = !todos[index].completed; | |
| renderTodoList(); | |
| } | |
| function deleteTodo(index) { | |
| todos.splice(index, 1); | |
| renderTodoList(); | |
| } |
现在,你拥有了一个基本的待办事项应用,它可以添加新的待办事项,标记它们为已完成,以及删除它们。通过这个实战项目,你应该对JavaScript的基本用法和DOM操作有了更深入的理解。随着你深入学习JavaScript,你将能够构建更复杂和功能丰富的Web应用。
相关文章:
JavaScript快速入门指南
JavaScript是一种广泛应用于网页开发的脚本语言,它可以让网页实现动态效果和交互性。无论是前端开发还是全栈开发,JavaScript都是不可或缺的一部分。本文将带你快速入门JavaScript,从基础语法到实际应用,让你快速上手这门强大的语…...
Esbuild介绍
Esbuild是一个由Evan Wallace基于Go语言开发的快速、可扩展的JavaScript和CSS打包器及压缩器。它以其极快的构建速度和高效的性能在众多构建工具中脱颖而出。 一、核心特性 超快的构建速度: Esbuild相比传统的构建工具(如Webpack)在构建速度…...
UnityShaderUI编辑器扩展
前言: 当我们在制作通用Shader的时候,避免不了许多参数混杂在一起,尽管在材质面板已经使用过Header标签来区分,但是较长的Shader参数就会导致冗余,功能块不够简约明了,如图: 对于Shader制作者来…...
分布式事务——2PC 代码示例
一 2PC代码示例 在Java中实现两阶段提交(2PC, Two-Phase Commit)协议通常涉及多个组件,包括事务协调者(Transaction Coordinator)和多个资源管理器(Resource Managers,如数据库)。在…...
vue实现简易的全局加载动画效果
效果展示 思路 封装一个组件,放Img,伪类样式,固定在屏幕fixed 然后App应用这个组件,Z index拉最大,防止用户在加载动画时乱点, v-show绑定loading,该数据可以放vuex还是任一的公共状态管理变…...
Linux网络工具“瑞士军刀“集合
一、背景 平常我们在进行Linux服务器相关运维的时候,总会遇到一些网络相关的问题。我们可以借助这些小巧、功能强悍的工具帮助我们排查问题、解决问题。 下面结合之前的一些使用经验为大家介绍一下一些经典应用场景下,这个网络命令工具如何使用的。例如怎…...
Sentinel隔离、降级、授权规则详解
文章目录 Feign整合Sentinel线程隔离熔断降级授权规则自定义异常结果 上一期教程讲解了 Sentinel 的限流规则: Sentinel限流规则,这一期主要讲述 Sentinel 的 隔离、降级和授权规则 虽然限流可以尽量避免因高并发而引起的服务故障,但服务还…...
C++11 列表初始化与类型声明
目录 0.前言 1.C11介绍 2.统一的列表初始化 2.1{}初始化 2.2initializer_list 2.2.1initializer_list 的基本用法 2.2.2用于类的 initializer_list 构造函数 2.2.3与标准库容器的结合 2.2.4优势与注意事项 3.新声明 3.1auto 3.1.1基本用法 3.1.2优势 3.1.3注意事项 3.2declt…...
缓存策略自定义:Laravel应用性能优化秘籍
缓存策略自定义:Laravel应用性能优化秘籍 在现代Web应用中,缓存是一种提高应用性能和响应速度的有效手段。Laravel框架提供了强大的缓存机制,支持多种缓存驱动,如文件、数据库、Redis等。然而,在某些情况下࿰…...
python连接sqlserver,封装操作
1封装 # 导入Flask类 import pymssql import tracebackclass Mssql(object):# 连接库def base(database):connect pymssql.connect(usersa,password123456,databasef{database},charsetutf8,as_dictTrue)if connect:print("数据库连接成功!")else:print…...
原生PHP/JS自主开发的交友内核框架婚恋交友系统V10
本文来自:婚恋交友系统V10 - 源码1688 应用介绍 原生PHP/JS自主开发的交友内核框架,极高性能、无捆绑、自主权、无流水扣点、独立全开源 01脱单盲盒:脱单盲盒类似于漂流瓶,先将自己《投放》到盲盒中,另一伴有缘将您取…...
如何在Java、Python、GO程序中使用AI人脸识别API接口
AI人脸识别是一种通过面部识别或确认一个人身份的软件。它通过识别和测量图像中的面部特征来工作。面部识别可以识别图像或视频中的人脸,确定两幅图像中的人脸是否属于同一个人,或者在大量现有图像中搜索人脸。 AI人脸识别的优势是什么? 高…...
在vue使用MQTT
在vue中使用MQTT 最近有个需求,需要前端直接链接mqtt,想到后面可能多出使用,就封装成了hooks 中间遇到了一个坑,就是浏览器默认不支持mqtt协议,其借助了webSocket实现的mqtt协议, 而mqtt默认未开启webSocke…...
DNS、网关、IP、DHCP
DNS、网关、IP、DHCP:深入剖析与理解 在计算机网络的世界中,DNS、网关、IP和DHCP是四个至关重要的概念,它们共同构建了互联网的基础架构,确保了数据的准确传输和设备的有效连接。本文将深入剖析这四个概念,帮助读者更…...
vue2 vue3 props 的处理机制
在 Vue 2 中,props 是单向数据流,父组件向子组件传递的 props 默认情况下是不具有响应式特性的。这意味着当父组件的数据发生变化时,如果传递给子组件的 props 发生变化,子组件不会自动更新视图。 具体来说,在 Vue 2 …...
C++第十弹 ---- vector的介绍及使用
目录 前言vector的介绍及使用1. vector的使用1.1 vector的定义1.2 iterator的使用1.3 vector空间增长问题1.4 vector增删查改 2. vector迭代器失效问题(重点) 总结 前言 本文介绍了C中的vector数据结构及其使用方法。 更多好文, 持续关注 ~ 酷酷学!!! 正文开始 vector的介绍…...
ValueError: invalid literal for int() with base 10: ‘a‘
ValueError: invalid literal for int() with base 10: ‘a‘ 目录 ValueError: invalid literal for int() with base 10: ‘a‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰ÿ…...
[C++探索]初始化列表,static成员,友元函数,内部类,匿名对象
💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…...
搭建自己的金融数据源和量化分析平台(二):读取上交所股票列表
我在上交所没发现上交所有像深交所一样的一键下载股票xls文档的按钮,因此上交所的股票列表读取就会比较麻烦。总体思路是查出来所有股票的代码之后根据股票代码逐一发起HTTP请求读取公司英文名、总股本、流通股本等详细信息,这就导致上交所爬虫的网络交互…...
Kafka知识总结(分区机制+压缩机制+拦截器+副本机制)
文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 分区机制 分区策略 分区策略是决定生产者将消息发送到哪个分区的…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
