JavaScript(ES5) 入门
01-简介
1)JavaScript 发展史
2)JavaScript 特点
- 解释性语言:JavaScript代码可以直接在浏览器中运行,无需编译。
- 动态类型:变量可以随时更改其数据类型。
- 面向对象:支持对象和继承。
- 事件驱动:响应用户操作,如点击、输入等事件。
- 跨平台:可以在不同的操作系统和设备上运行。
3)JavaScript 应用场景
- 网页交互:如表单验证、动态内容更新、动画效果等。
- 服务器端开发:如Node.js。
- 移动应用开发:如React Native、Ionic。
- 桌面应用开发:如Electron。
02-js第一个程序
1)什么是JavaScript?
2)第一个程序
<script type="text/javascript">alert("你好,JavaScript");</script>
3)细节
<!-- 将test.js文件中的内容,引入到html中并执行 --><script type="text/javascript" src="test.js"></script>
4)常用方法
03-js语法基础
1)变量
var c=999;var b=888;//在js中可以重复定义//后边定义的变量可以替换前边定义的变量
var aa=1;console.log(typeof aa);
2)关键字和保留字
3)标识符命名规范
4)数据类型
let num = 100; // 数字let str = "Hello"; // 字符串let isTrue = true; // 布尔值let arr = [1, 2, 3]; // 数组let obj = {a: 1, b: 2}; // 对象let undef; // 未定义let nul = null; // 空值
var s='字符串';var f="字符串";var d='""';var d="''";//单双引号嵌套:外部使用单引号,内部使用双引号;外部使用双引号,内部使用单引号。
5)数据类型转换
var s="123";console.log("s="+s+"; type="+typeof s);//将字符串转换为数字s=s-0;s=s*1;s=s/1;console.log("s="+s+"; type="+typeof s);//结果为123 类型是number
var ss="444";//将字符串转换为数字ss=parseInt(ss);console.log("ss="+ss+"; type="+typeof ss);//结果为444 类型是numbervar x=2.343123;//取整x=parseInt(x);console.log("x="+x);//结果为2 类型是numberparseFloat(x): 将字符串转换为小数var ss="12.3212";//将字符串转换为小数ss=parseFloat(ss);console.log("ss="+ss+"; type="+typeof ss);//结果为12.3212 类型是number若x无法转换为数字,返回值NaNvar ss="dsad";//将字符串转换为小数ss=parseFloat(ss);console.log("ss="+ss+"; type="+typeof ss);//结果为NaN数字转字符串[1] 隐式类型转换字符串和任何其他类型做拼接运算,结果都是字符串2 + "";var n=2;//数字转换为字符串n=n+"";console.log("n="+n+"; type="+typeof n);//结果为2 类型是String[2] 显式类型转换调用数字的toString方法var n=2;//数字转换为字符串n=n.toString();console.log("n="+n+"; type="+typeof n);//结果为2 类型是String//在js里面所有的东西都是对象,包括这个数字也是对象
6)运算符
04-流程控制
1)流程控制的分类
2)顺序执行结构
3)选择执行结构
1.if结构
if(条件) {// 代码块}
if(条件) {// if 代码块} else {// else 代码块}
if(条件1) { // 代码块1 }else if(条件2) { //代码块2 }else if(条件3) { //代码块3 }...else if(条件n) { //代码块n }else {}
2.switch结构
switch(变量) {case 情况:break;case 情况:break;case 情况:break;...default:break;}
<script type="text/javascript">var day = 1;switch (day) {case 0 :document.write('星期日');break;case 1 :document.write('星期一');break;case 2 :document.write('星期二');break;case 3 :document.write('星期三');break;case 4 :document.write('星期四');break;case 5 :document.write('星期五');break;case 6 :document.write('星期六');break;default:document.write('数字不满足要求');}</script>
4)循环结构
1.for循环
for(循环变量初始化 1;循环条件 2 ;循环变量改变 3) {循环体 4}
2.while循环
循环变量初始化 1;while(循环条件 2) {循环体 3循环变量改变 4}
<script type="text/javascript">//求1--100的和var sum = 0;var i = 1;while (i <= 100) {sum += i;i++;}document.write("1--100的和是" + sum + "");document.write("i是" + i);</script>
3.do-while循环
循环变量初始化;do {循环体;循环变量的改变;} while(循环条件);do-while 循环和while循环区别?do - while 先执行再判断,至少执行一次while 先判断再执行<script type="text/javascript">//求1--100的和var sum = 0;var i = 1;do {sum += i;i++;} while (i <= 100)document.write("1--100的和是" + sum + "");document.write("i是" + i);</script>
4.退出循环结构
05-错误处理
06-函数和数组
1)函数
function 函数名称(参数1,参数2,...,参数n) {// 函数体return 值;}
// 定义无参无返回值的函数 add// 定义: 在堆空间开辟了一块内存,存储相关的代码// 注意: function 和 函数名称之间没有任何关键字function add() {// 求1-100的和var s = 0;for (var i = 1; i <= 100; i++) {s = s + i;}console.log(s);}//调用: 将堆中的代码获取出来,放到栈空间中执行// 函数名称(); () : 含义就是调用add();
// 定义有参函数// 注意: 参数直接写参数名,不需要任何关键字修饰// 形式参数: 简称形参,只有含义没有值// a 和 b 就是形参,代表加法开始和结束function add2( a, b) {var s = 0;for (var i = a; i <= b; i++) {s = s + i;}console.log("s = " + s);}// 调用函数: 函数名称(值,值,...,值);// 实参: 实际参数// 参数传递: 调用时会将实参的值传递给形参,然后形参就有实际的值,然后开始执行函数中代码add2(1,50);
// 定义有返回值的函数function add3(a , b) {var s = 0;// 代表程序的结束; 可以用在函数执行的规则性验证// a 和 b 必须都是数字if(typeof a != "number" || typeof b != "number") {return ; // 程序结束,默认返回 undefined}// a 一定比 b 小if(a > b) {return ;// 程序结束,默认返回 undefined}for (var i = a; i <= b; i++) {s = s + i;}return s;// 将s的值返回给调用者}// 调用函数: var 变量 = 函数名称(值,值,...,值);var ret = add3(1,2);alert("ret = " + ret);
2)全局变量和局部变量
3)数组
var arr =new Array(12,23,123,2,3);console.log(arr);var arr=[12,23,123,2,3];console.log(arr);var arr=[];//空数组
// 数组的长度可变arr[0]=111;arr[1]=12;//通过下标取值var r=arr[10];console.log("r="+r);
// 获取数组长度console.log("数组长度 = " + arr.length);// 数组遍历: 使用索引从0开始,到数组长度-1结束for (var i = 0; i < arr.length; i++) {console.log(arr[i]);}
07-对象
1)string对象
<script type="text/javascript">var s="hello javascript";//长度console.log(s.length);//获取指定位置的字符console.log(s.charAt(6));//查询字符console.log(s.indexOf("a"));//查询字符串a最后出现的位置console.log(s.lastIndexOf("a"));//切割字符串console.log(s.split(" "));//截取console.log(s.substring(6));console.log(s.substring(6,9));</script>
2)Math 对象
3)Date 对象
<script type="text/javascript">var d = new Date(); //系统当前时间console.log(d);console.log(d.getYear()+1900); //120+1900=2020console.log(d.getFullYear());//2020console.log(d.getMonth()+1);//2 +1 ===>3//年-月-日 时:分:秒var d2 = d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()+" "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();console.log(d2);//1970----现在d时间 总毫秒数var longTime = d.getTime();var d3 = new Date("2000-01-01 10:10:10");console.log(d3);</script>
4)自定义对象
// 参数作用: 初始化属性// this : 当前对象,指将要创建的对象function 构造函数名称(参数1,参数2,...,参数n) {// 添加属性this.属性名称 = 参数;this.属性名称 = 参数;...// 添加方法this.方法名称 = function(参数列表) {}this.方法名称 = function(参数列表) {}...}
<script type="text/javascript">/* 定义构造函数: 可以理解为一类事物 */function Person(name,age,sex) {// 添加属性this.personName = name;this.age = age;this.sex = sex;// 添加方法this.eat = function(e) {alert(this.personName + "正在吃" + e);}this.play = function(p) {alert(this.personName + "正在玩" + p);}}// 通过构造函数创建对象var p1 = new Person("张三",23,"男");console.log(p1);// 使用属性: 对象.属性p1.personName = "张飒";// 设置属性console.log(p1.personName);// 获取属性// 使用方法: 对象.方法p1.eat("麻辣烫");</script>
08-BOM
1)什么是BOM?
2)window对象
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><h1>window.setTimeout,clearTimeout函数</h1><script type="text/javascript">var c=10;var t;function timedCount(){console.log("倒计时开始:"+c);t=setTimeout("timedCount()",1000);c--;if(c<1){console.log("倒计时结束");window.clearTimeout(t);}}//调用函数timedCount();</script></body></html>
3)点击事件
<!-- 网页中任何一个元素都可以添加事件 --><!-- 当点击此按钮时,执行clickMe函数 --><!-- 事件触发: 当这个事件执行的时候,叫做事件触发 --><p οnclick="clickMe()">点我~~</p><button οnclick="clickMe2()">点我~~</button><script type="text/javascript">function clickMe() {alert("点我干嘛~~");}function clickMe2() {alert("就点你了~~");}</script>
4)location 地址对象
5)history 历史对象
09-DOM
1)什么是DOM?
2)查找元素(DOM对象, 标签元素)
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><h1>DOM编程2</h1><div><a id="a1" name="a1" class="c1" href="#">百度</a><a id="a2" name="a1" class="c1" href="#">新浪</a><a id="a3" name="a1" class="c1" href="#">京东</a><a id="a4" name="a2" class="c2" href="#">淘宝</a></div>3)DOM对象的修改, 修改DOM对象中的属性[1] innerHTML : 操作标签内部的HTML代码DOM对象.innerHTML = html代码; 设置标签内部的HTML代码var 变量 = DOM对象.innerHTML; 获取标签内部的HTML代码[2] value : 操作表单元素(input,select)的value属性<script type="text/javascript">//获取id="a1" 的元素 ----唯一查询 (一个页面中,不允许重复的id元素)var a1 = document.getElementById("a1");console.log(a1);//根据标签名 获取元素----返回多个-----HTMLCollection(4)var a2 = document.getElementsByTagName("a"); //获取本网页所有a标签console.log(a2);//根据name获取元素 ------>NodeList 节点对象集合var a3 = document.getElementsByName("a1");console.log(a3);//根据classname 样式名称 获取元素------》所有样式名称为c1的元素节点var a4 = document.getElementsByClassName("c1");console.log(a4);//a1的父节点 divvar p = a1.parentNode;console.log(p);//获得元素的子节点var pChildren = p.childNodes;console.log(pChildren);</script></body></html>
3)DOM对象的修改, 修改DOM对象中的属性
<script type="text/javascript">//获取 第2个h1的内部内容var h1 = document.getElementsByTagName("h1");console.log(h1[1].innerHTML);//修改p段落 内容var p1 = document.getElementsByTagName("p")[0];//修改内容p1.innerHTML="p段落修改后的新内容";</script>
//获取name="name"的输入框的内容var input1 = document.getElementsByName("name")[0];console.log(input1.value); //获取value//修改valueinput1.value="张三";
//单选按钮 男选择var sexes = document.getElementsByName("sex");console.log(sexes[0].checked);sexes[0].checked=true; //设置为选中//复选框var ck =document.getElementById("rememberMe");ck.checked = true;//复选框选中
<body><h1>DOM编程4</h1><div id="div1" style="width:200px;height:100px;background-color: red;display:block "></div><input type="button" οnclick="fun()" value="隐藏"><script type="text/javascript">//隐藏/显示 div id="div1"function fun(){//获取div1var div1 = document.getElementById("div1");//获取input buttonvar bt = document.getElementsByTagName("input")[0];if(bt.value=='隐藏'){//div隐藏div1.style.display = "none";//将按钮的value值设置为显示bt.value ="显示";}else{//显示工作//div显示div1.style.display = "block";//将按钮的value值设置为 隐藏bt.value ="隐藏";}}</script></body>
4)事件处理
1)、点击事件
2)、焦点事件
3)、加载事件
4)、鼠标事件
5)、键盘事件
6)、选择和改变事件
7)、表单事件
var input = document.getElementsByName("username")[0];input.onblur = function() {console.log(this); // 代表元素本身console.log("失去焦点事件执行")}
<form action="productDeletesServlet" method="post"><table border="1"><tr><th><input type="checkbox" name="ids" οnclick="font(this)">
全选/全不选
</th><th>序号</th><th>商品名称</th><th>商品单价</th><th>折扣</th><th>折扣价格</th><th>商品类型</th><th>操作</th></tr><c:forEach items="${list }" var="product" varStatus="p"><tr><td><input type="checkbox"
name="ids" value="${product.product_id }"></td><td>${p.count}</td><td>${product.product_name }</td><td>${product.price }</td><td>${product.zhekou }</td><td>${product.zhekou_price }</td><td>${product.product_type_name }</td><td>
<a href="productUpdateServlet?id=${product.product_id }">
修改
</a>
</td></tr></c:forEach></table><input type="submit" value="批量删除"></form><a href="typeServlet">添加</a><script type="text/javascript">var idsName=document.getElementsByName("ids");function font(e){for(var i=0;i<idsName.length;i++){idsName[i].checked=e.checked;}}</script>
5)文档处理
相关文章:
JavaScript(ES5) 入门
01-简介 1)JavaScript 发展史 [1] 1995年,navigator(导航者),netscape(网景);用户体验性特别好 [2] 表单验证难题,表单验证都是在后台处理.当时处在网速特别慢的时代,发送一个请求,接收响应 需要5分钟左右的时候提高表单验证的速度,想开发一种语言在前端进行表单验证. [3] 1995…...
趣店集团golang一面要个20K,Channel什么情况下会出现死锁,有遇到过吗?
结束后面试官加了VX,并询问方便二面的时间,一直还没回复,拖着拖着给忘啦... 面试题 1、自我介绍 2、你在团队里头负责哪一块,这个物流开放平台流量多大 3、为什么今年3月份被从物流开放团队转到了finance财务部门,感…...
智能化乙级资质延期,行业标准的坚守
智能化乙级资质延期:行业标准的坚守 一、引言 智能化乙级资质是企业在智能化工程设计与施工领域的重要认证,它代表了企业的技术实力和专业水平。为确保企业能够持续满足行业标准,保持竞争力,智能化乙级资质的延期管理显得尤为重要…...
d20(184-190)-勇敢开始Java,咖啡拯救人生
目录 网络通信 网络通信三要素(IP地址,端口号,协议 IP地址 InetAddress 端口号 协议 传输层的两个通信协议 UDP通信 java.net.Datagramsocket类 客户端 服务端 UDP通信多收多发 客户端 服务端 TCP通信 java.net.Socket类 客…...
Python 登录表单处理
分析: 处理登录表单以便爬⾍能够抓取需要认证的⽹⻚数据,通常需要模拟登录过程。这可以通过发送带有⽤⼾凭证的POST请求到登录表单的URL来实现。为了保持登录状态,需要处理和保存会话中的 cookies。Python的 requests 库可以⽅便地处理这些任…...
2024.05.27学习记录
1、面经复习: 实际工作经验章节 2、代码随想录刷题:动态规划剩下部分和单调栈 3、rosebush 组件库完成Input 和 AutoComplete部分内容...
BLASTBufferQueue端的GraphicBuffer怎么和SurfaceFlinger端的BufferStateLayer关联上
BLASTBufferQueue端的GraphicBuffer怎么和SurfaceFlinger端的BufferStateLayer关联上 引言 在跟进hwc_layer是如何产生的,并如何被填充上GraphicBuffer的,怎么也找不到被填充的GraphicBuffer的来源,最终找到了,它的来源是客户端的…...
48、spfa求最短路
spfa求最短路 题目描述 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。 数据保证不存在负权回路。 输入格式 第一行包…...
安装PyTorch详细步骤
💥注意事项: CPU版和GPU版选一个进行安装即可 如果有Nvidia显卡,则安装cuda版本的PyTorch,如没有nvidia显卡,则安装cpu版。 目前常见的深度学习框架有很多,最出名的是:PyTorch(faceb…...
linux线程,线程控制与线程相关概念
线程概念 线程这个词或多或少大家都听过,今天我们正式的来谈一下线程; 在我一开始的概念中线程就是进程的一部分,一个进程中有很多个线程,这个想法基本是正确的,但细节部分呢我们需要细细讲解一下; 什么…...
第八大奇迹
目录 题目描述 输入描述 输出描述 输入输出样例 示例 输入 输出 运行限制 原题链接 代码思路 题目描述 在一条 R 河流域,繁衍着一个古老的名族 Z。他们世代沿河而居,也在河边发展出了璀璨的文明。 Z 族在 R 河沿岸修建了很多建筑,…...
MySQL:CRUD初阶(有图有实操)
文章目录 📑1. 数据库的操作🌤️1.1 显示当前的数据库🌤️1.2 创建数据库🌤️1.3 选中数据库🌤️1.4 删除数据库 📑2. 表的操作🌤️2.1 查看表结构🌤️2.2 创建表🌤️2.3…...
『大模型笔记』使用 vLLM 和 PagedAttention 快速提供 LLM 服务!
使用 vLLM 和 PagedAttention 快速提供 LLM 服务! 文章目录 一. 使用 vLLM 和 PagedAttention 快速提供 LLM 服务!1.1. PagedAttention二. 参考文献小红书中文字幕视频:https://www.xiaohongshu.com/explore/66502b60000000000500433e官网文档(推荐,里面有动图解释):vLLM:…...
简述vue-loader是什么?使用它的用途有哪些
vue-loader是一个webpack的加载器(loader),主要用于将Vue组件的单文件(.vue文件)转换为JavaScript模块。使用vue-loader的主要用途包括: 解析.vue文件:vue-loader能够解析.vue文件中的模板、样式和脚本,并将它们分离出来进行处理…...
如何远程访问Redis?
远程访问Redis是一种常见的需求,特别是在分布式系统或跨地域网络中。通过远程访问,我们可以轻松地对远程的Redis数据库进行操作和管理。 天联保障数据安全 对于远程访问Redis的安全性问题,我们可以借助天联来保障数据的安全。天联是一种基于…...
#12松桑前端后花园周刊-SolidStart、Vercel融资、Angular18、Nextjs15RC、p5.js、ChromeDevTools引入AI
⚡️行业动态 SolidStart 1.0 元框架发布 Solidjs 核心团队发布其元框架 SolidStart 1.0 正式版,其特点如下:基于文件系统的路由;支持SSR、流式SSR、CSR、SSG渲染模式;通过代码分割、树摇和无用代码删除构建优化;基于…...
vue3 vite title 页面标题设置
效果图: 1. 安装 vite-plugin-html 插件 npm install vite-plugin-html -D2. 修改 vite.config.js import {defineConfig, loadEnv} from vite import { createHtmlPlugin } from "vite-plugin-html" import {resolve} from path import vue from vitej…...
spring boot添加License(软件许可)
文章目录 前言1. 生成钥匙库2. 生成证书3. 生成公匙库4.业务代码1. 引入依赖2. 关键代码3. 配置文件 5、改成线上地址,这样不用每次打包,发送license.lic文件给客户,重启项目就行5.1、工具类5.2 修改部分: 总结 前言 工作需要给软…...
LangChain打造一个AI客服
最近在学习LangChain,langchain的第一个入门应用就是和ChatGPT结合形成的一个AI客服,本期文章就带大家一起认识下 LangChain LangChain是现在用得最多的AI框架,langchain在帮助如基于文档数据的回答、聊天机器人和代理这类的应用程序 langch…...
【前端三剑客之JS】详解JS
1. JS的引入方式 (1). 内部脚本方式引入 在页面上,通过一对script标签引入js代码.script代码放置位置有一定随意性,一般放在head标签中. (2).外部脚本方式引入. 内部脚本只能在当前页面中使用,代码复用度不高.可以将脚本放在单独的js文件…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
