前端编程语言——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+···+100
        var 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+b
    var fn = (a,b) => a+b;
    console.log(fn(1,2)) // 3
    var fx = (name,age) => ({name:name, age:age})
    console.log(fx('豆豆', 18)) // 返回的是object
    var 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>
    // 创建对象的方法1
    var 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 = 0
    name = '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、练习:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql8死锁排查

Mysql8死锁排查 Mysql8 查询死锁的表 -- 查询死锁表select * from performance_schema.data_locks;-- 查询死锁等待时间select * from performance_schema.data_lock_waits;Mysql8之前的版本 查询死锁的表 -- 查询死锁表SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;-- 查询…

经典游戏案例:植物大战僵尸

学习目标&#xff1a;植物大战僵尸核心玩法实现 游戏画面 项目结构目录 部分核心代码 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using Random UnityEngine.Random;public enum Z…

AcWing算法基础课笔记——高斯消元

高斯消元 用来求解方程组 a 11 x 1 a 12 x 2 ⋯ a 1 n x n b 1 a 21 x 1 a 22 x 2 ⋯ a 2 n x n b 2 … a n 1 x 1 a n 2 x 2 ⋯ a n n x n b n a_{11} x_1 a_{12} x_2 \dots a_{1n} x_n b_1\\ a_{21} x_1 a_{22} x_2 \dots a_{2n} x_n b_2\\ \dots \\ a…

STM32学习笔记(十)--I2C、IIC总线协议详解

概述&#xff1a;Inter Integrated Circuit&#xff0c;一组多从 多组多从 有应答 是一种同步&#xff08;具有时钟线需要同步时钟SCL&#xff09;、串行&#xff08;一位一位的往一个方向发送&#xff09;、半双工&#xff08;发送接收存在一种&#xff09;通信总线。 &…

使用 ks 安装 mysql

https://www.kubesphere.io/zh/docs/v3.3/application-store/built-in-apps/mysql-app/ 准备工作 您需要启用 OpenPitrix 系统。如何启用&#xff1f; 动手实验 步骤 1&#xff1a;从应用商店部署 MySQL 在 demo-project 的概览页面&#xff0c;点击左上角的应用商店。找到 …

AlmaLinux 更换CN镜像地址

官方镜像列表 官方列表&#xff1a;https://mirrors.almalinux.org/CN 开头的站点&#xff0c;不同区域查询即可 一键更改镜像地址脚本 以下是更改从默认更改到阿里云地址 cat <<EOF>>/AlmaLinux_Update_repo.sh #!/bin/bash # -*- coding: utf-8 -*- # Author:…

【Java】已解决java.io.ObjectStreamException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.io.ObjectStreamException异常 在Java中&#xff0c;java.io.ObjectStreamException是一个在序列化或反序列化对象时可能抛出的异常基类。这个异常通常表示在对象流处理…

Spire.PDF for .NET【文档操作】演示:如何删除 PDF 中的图层

借助Spire.PDF&#xff0c;我们可以在新建或现有pdf文档的任意页面中添加线条、图像、字符串、椭圆、矩形、饼图等多种图层。同时&#xff0c;它还支持我们从pdf文档中删除特定图层。 Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作 PD…

35.简易远程数据框架的实现

上一个内容&#xff1a;34.构建核心注入代码 34.构建核心注入代码它的调用LoadLibrary函数的代码写到游戏进程中之后无法调用&#xff0c;动态链接库的路径是一个内存地址&#xff0c;写到游戏进程中只把内存地址写过去了&#xff0c;内存地址里的内容没写过去&#xff0c;导致…

Apple - Secure Coding Guide

本文翻译整理自&#xff1a;Secure Coding Guide https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Introduction.html#//apple_ref/doc/uid/TP40002477-SW1 文章目录 一、安全编码指南简介1、概览黑客和攻击者没有平台是免疫…

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

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

江协科技51单片机学习- p11 静态数码管显示

前言&#xff1a; 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记&#xff0c;在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用&#xff1a; 51单片机入门教程-2…

BP神经网络的反向传播(Back Propagation)

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、什么是BP的反向传播1.1 什么是反向传播1.2 反向传播的意义 二、BP神经网络如何通过反向传播计算梯度三、BP梯度公式解读 BP神经网络更原始的名称是"多层线性感知机MLP"&#xff0c;由于它在训练时…

29-Linux--守护进程

一.基础概念 1.守护进程&#xff1a;精灵进程&#xff0c;在后台为用户提高服务&#xff0c;是一个生存周期长&#xff0c;通常独立于控制终端并且周期性的执行任务火处理事件发生 2.ps axj&#xff1a;查看守护进程 3.进程组&#xff1a;多个进程的集合&#xff0c;由于管理…

【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow

一、介绍 球类识别系统&#xff0c;本系统使用Python作为主要编程语言&#xff0c;基于TensorFlow搭建ResNet50卷积神经网络算法模型&#xff0c;通过收集 ‘美式足球’, ‘棒球’, ‘篮球’, ‘台球’, ‘保龄球’, ‘板球’, ‘足球’, ‘高尔夫球’, ‘曲棍球’, ‘冰球’,…

virtualbox中共享盘的使用

Windows通过共享盘向虚拟机&#xff08;ubuntu&#xff09;传输文件 第一步&#xff1a; 第二步&#xff1a; 三。完成

学习笔记——路由网络基础——动态路由

五、动态路由 1、动态路由概述 动态路由&#xff1a;通过在设备上运行某种协议&#xff0c;通过该协议自动交互路由信息的过程。 动态路由协议有自己的路由算法&#xff0c;能够自动适应网络拓扑的变化&#xff0c;适用于具有一定数量三“层设备的网络。 动态路由协议适用场…

Linux检查端口nmap

yum install -y nmap # 查看本机在运行的服务的端口号 nmap 127.0.0.1 补充&#xff1a;netstat netstat -tunlp | grep 3306

可灵王炸更新,图生视频、视频续写,最长可达3分钟!Runway 不香了 ...

现在视频大模型有多卷&#xff1f; Runway 刚在6月17号 发布Gen3 &#xff0c;坐上王座没几天&#xff1b; 可灵就在6月21日中午&#xff0c;重新夺回了王座&#xff01;发布了图生视频功能&#xff0c;视频续写功能&#xff01; 一张图概括&#xff1a; 二师兄和团队老师第一…

c++使用std::function/std::bind

1&#xff09;C入门级小知识&#xff0c;分享给将要学习或者正在学习C开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 std::function对象是对C中现有的可调用实体的一种类型安全的包裹&…