Web前端105天-day44-JSCORE

news2024/11/24 5:05:00

JSCORE04

目录

前言

一、复习

二、forEach

三、reduce

四、展开语法

五、解构语法

六、形参默认值

七、剩余参数

总结


前言

JSCORE04学习开始


一、复习

  • JS的第6个版本, 带来了大量的新特性, 新语法
  • let/const : 两个新的声明变量的方式
    • 新的作用域
      • 脚本: 对应全局, 用于存放 自定义 的 全局属性
      • 块级: 对应局部作用域, 比匿名函数自调用语法更简单的 创建 局部作用域
    • 更加安全
      • const: 声明时必须赋值, 后续无法修改
    • 声明提升
      • 依然存在提升, 但是 提升后处于暂存死区状态, 不允许使用; 直到代码执行到 声明所在行才能解锁
  • 模板字符串
    • 支持换行, 可以书写更加易读的 HTML 代码
    • 支持在字符串中书写JS代码. 让字符串拼接操作更方便
  • 箭头函数
    • 格式更简单:()=>{}
    • 语法糖
      • 形参只有一个, () 可以省略
      • 函数体只有一行, {return } 省略
    • this: 没有this; 按照 作用域链 原则, 向上级作用域找
  • 数组高阶函数
    • 实际开发时, 数据通常从服务器的数据库获取 -- 查询出来的都是数组类型
    • every : 每一个元素都符合条件 -- 类似 逻辑与 &&
    • some : 至少一个元素符合条件 -- 类似 逻辑或 ||
    • filter : 满足条件的元素过滤出来
    • map : 映射; 把数组中的元素 按照一定的规范, 修改成其他的样子, 得到新的数组

二、forEach

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>forEach 10:11</title>
</head>

<body>
  <script>
    // 遍历数组的方式 有 4 种
    const names = ['lucy', 'lily', 'john', 'tom']

    // 1. for - 利用length 属性
    for (let i = 0; i < names.length; i++) {
      console.log(i, names[i]);
    }

    // 2. for..in : 此方案是遍历对象类型的通用方案, 非数组专属
    for (const key in names) {
      // key: 属性名 -- 字符串
      console.log(key, names[key])
    }
    // 如果打印多个元素, 类型不同, 则后台会有特殊显示
    console.log(1, 'mike', 'xxx');

    // 3. for..of : ES6新增的 数组专属的遍历方案
    for (const value of names) {
      console.log(value)
    }

    // 4. forEach: 原型中提供此方法, 就可以用来遍历
    // -- 得益于 箭头函数的 语法糖, 格式更简单
    // -- 单纯遍历数组元素, 没有返回值
    names.forEach((value, index, array) => {
      console.log(index, value)
    })
  </script>
</body>

</html>
  • 练习
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>练习 10:26</title>
</head>

<body>
  <script>
    var nums = [12, 436, 787, 345, 4, 67, 54, 32, 54, 65]
    // 要求: 计算出 数组中元素的总和

    var total = 0
    for (const n of nums) {
      total += n
    }
    console.log(total)
    ///
    var total = 0
    nums.forEach(v => total += v)
    console.log(total)

    /
    class Goods {
      constructor(gname, price, count) {
        this.gname = gname
        this.price = price
        this.count = count
      }
    }

    const list = [
      new Goods("苹果", 10, 20),
      new Goods("香蕉", 6, 15),
      new Goods("鸭梨", 12, 10),
      new Goods("葡萄", 20, 30),
    ]

    console.log(list)

    var total = 0
    for (const g of list) {
      total += g.price * g.count
    }
    console.log(total);

    var total = 0
    list.forEach(v => total += v.price * v.count)
    console.log(total)
  </script>
</body>

</html>
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>练习 10:48</title>
</head>

<body>
  <script>
    class Goods {
      constructor(gname, price, count, sale) {
        //        商品名   单价  数量   是否售出
        this.gname = gname
        this.price = price
        this.count = count
        this.sale = sale
      }
    }

    var list = [
      new Goods('黄焖鸡', 23, 10, true),
      new Goods('螺蛳粉', 17, 1, false),
      new Goods('红烧肉盖饭', 31, 20, true),
      new Goods('麻辣烫', 25, 12, false),
    ]

    //普通
    var total = 0
    list.forEach(value => {
      if (value.sale) {
        total += value.price * value.count
      }
    })

    console.log(total)

    // 精巧
    var total = 0
    // 数学设定: 任何数字 x 0  = 0
    // 隐式类型转换: 在数学运算表达式中,  true -> 1    false -> 0
    // sale 为假时, total += 0
    list.forEach(v => total += v.price * v.count * v.sale)
    console.log(total)
  </script>
</body>

</html>

三、reduce

 

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>reduce 11:18</title>
</head>

<body>
  <script>
    // reduce: 合并;  把数组中的元素 合并成 一个值
    var nums = [12, 43, 54, 65, 76, 87, 89]
    // 效果: 累加每个元素

    // reduce(回调函数, 盒子初始值)
    // - 参数2: 默认值是 数组的第一个元素的值, 通常会手动设定为0
    // - 参数1: 每个元素都会被执行一次, 把自身的值 和 传入的box中的值 操作后返回给下一个元素
    var x = nums.reduce((box, value) => {
      return box + value
    }, 0)

    var x = nums.reduce((box, value) => box + value, 0)

    console.log(x)
  </script>
</body>

</html>

四、展开语法

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>展开语法</title>
</head>

<body>
  <script>
    // 计算出任意个数字的总和
    function sum() {
      // 伪数组/类(似)数组
      // 外观和数组一样, 用数字做属性名, 带有 length 属性
      // 但是 原型 不是数组 Array.prototype
      // 则其无法使用数组的方法
      console.log(arguments)
      var total = 0
      // for..of  : 只要带 length 属性, 就能遍历
      for (const num of arguments) {
        total += num
      }
      return total
    }

    console.log(sum(12, 43, 54, 65, 7687, 87));
    console.log(sum(12, 43, 54));

    var nums = [12, 34, 546, 67, 878, 98]
    // ES6前: 用 apply 把数组打散,拆散
    console.log(sum.apply(1, nums))

    // ES6后: 提供新的运算符 ... 可以去掉数组的[]包围
    console.log(sum(...nums))

    // ... 可以去掉 {} 和 [] 的包围
    var m = { x: 10, y: 20 }
    // 如果有同名属性, 后写的覆盖先写的
    var n = { ...m, z: 30, x: 40 }
    console.log(n)

    var aa = [11, 22, 33]
    var bb = [44, 55, 66]

    // 以前: 用 concat 方法来合并数组
    var cc = aa.concat(bb, 77, 88)
    console.log(cc)

    var cc = [...aa, ...bb, 77, 88]
    console.log(cc)
  </script>
</body>

</html>

五、解构语法

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>解构语法 14:01</title>
</head>

<body>
  <script>
    // 把数组 或 对象 中的值 解放出来, 存储在属性里
    var names = ['mike', 'lucy', 'lily', 'john']

    // 传统方案
    // var a = names[0]
    // var b = names[1]
    // var c = names[2]

    // 可选解构
    var [x, , y, z] = names
    console.log(x, y, z);

    // 新语法
    var [a, b, c] = names
    console.log(a, b, c)

    // 巧妙的衍生用法: 互换变量值
    var m = 10
    var n = 20;
    // 必须用分号间隔, 否则会认为是  20[m,n] 产生歧义
    [m, n] = [n, m]

    // 解析
    // 1. 制作1个数组  [n, m]  -> [20, 10]
    // 2. 解构数组  [m, n] = [20, 10]
    // 结果: m = 20;  n = 10

    console.log('m', m)
    console.log('n', n)
  </script>
</body>

</html>
  • 对象的解构
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>对象的解构 14:15</title>
</head>

<body>
  <script>
    var emp = {
      ename: "泡泡",
      age: 19,
      phone: '18823240404',
      boyFriend: '小鱼'
    }

    //传统
    // var ename = emp.ename
    // var age = emp.age
    // var phone = emp.phone

    // ctrl + i : 有提示
    // 别名语法  {属性名: 别名}
    var { age, ename, phone, boyFriend: bf } = emp

    console.log(ename, age, phone, bf);
  </script>
</body>

</html>
  • 复杂解构
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>练习</title>
</head>

<body>
  <script>
    var emp = {
      ename: "凯凯",
      alias: '追风少年',
      age: 34,
      skills: ['吃饭', '睡觉', '写BUG']
    }

    var { age, alias, ename, skills: [s1, s2, s3] } = emp

    console.log(age, alias, ename, s1, s2, s3);
  </script>
</body>

</html>
  • 形参解构
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>形参解构 14:41</title>
</head>

<body>
  <script>
    var c1 = { width: 10, length: 20, height: 30 }

    // 体积
    function volume(cube) {
      const { width: w, height: h, length: l } = cube
      return w * h * l
      // return cube.width * cube.length * cube.height
    }


    // 面积
    // 形参解构语法: 直接把传入的实参 进行解构
    function area({ width: w, height: h, length: l }) {
      // const { width: w, height: h, length: l } = cube
      return 2 * (l * w + l * h + w * h)

      // return 2 * (cube.width * cube.length + cube.length * cube.height + cube.width * cube.height)
    }

    volume(c1)
  </script>
</body>

</html>


六、形参默认值

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>形参默认值 15:11</title>
</head>

<body>
  <script>
    // 形参指定默认值
    function show(uname = '凯凯') {
      console.log(uname);
    }

    show() // 不传递实参, 则采用默认值 凯凯
    show("泡泡") // 传递实参, 则采用传递的值

  </script>
</body>

</html>

七、剩余参数

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>剩余参数 15:15</title>
</head>

<body>
  <script>
    // 剩余参数 用于代替 arguments 属性
    // arguments的问题
    // 1. 隐式的: 导致很多人不知道其存在
    // 2. 伪数组: 缺少数组的方法, 使用时不方便

    // ... 这个运算符 有两种用途
    // ...数组, ...对象:  展开操作
    // ...形参 : 剩余参数;  代表这个形参接收所有的(没人要的)实参
    function sum(x, y, ...args) {
      console.log(args);
    }

    sum('泡泡', '凯凯', '铭铭', '亮亮')
  </script>
</body>

</html>


总结

  • forEach: 单纯的遍历数组
    • 如果是伪数组, 需要检查其原型中 是否有forEach 可以用
    • 通用: for..of 只要有 length 属性, 就能遍历
  • reduce(鸡肋): 合并数组元素
    • 但是 因为逻辑较为复杂, 使用较少

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

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

相关文章

RocketMQ中的线程池是如何创建的?

前言 大家好&#xff0c;今天主要来和大家聊一聊RocketMQ中的线程池是如何创建的&#xff0c;如何设置线程池数量&#xff0c;同时也可以从中去学习到一些线程池的实践和需要注意的一些细节。 RocketMQ在哪些地方使用到了线程池&#xff1f; 在RocketMQ中存在了大量的对线程…

学籍信息网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 学籍信息管理&#xff1a;添加信息、修改信息、删除信息、查询信息 添加信息&#xff0c;管理员根据学生的将信息导入系…

[附源码]Python计算机毕业设计高校师资管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

行业分析| 智慧头盔在快对讲上的应用与实践

快对讲综合调度系统是基于移动通信网络&#xff0c; 整合集群对讲、视频监控、实时音视频技术、PSTN、GIS定位、IM和调度业务的产品&#xff0c;为客户提供专业对讲、视频会议、可视化融合指挥调度等功能为一体的音视频实时交互平台。 快对讲和智慧头盔 智慧头盔&#xff0c;…

PHP实验室管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP实验室管理系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为PHP APACHE&#xff0c;数据库为 mysql5.0&#xff0c;使用php语言开发。 PHP…

第10讲:vue脚手架集成axios

一、创建项目并添加axios支持 创建项目请参考&#xff1a;使用脚手架创建vue项目 创建路由项目请参考&#xff1a;路由开发 1.1、添加axios支持 使用如下命令添加axios支持 npm install axios //vue-cli2.0安装方式1.2、在main.js中引用并使用axios 使用如下命令 impor…

git初识(三)

分支 顾名思义&#xff0c;分支就是从主线上分离出来进行另外的操作&#xff0c;而又不影响主线&#xff0c;主线又可以继续干它的事&#xff0c;&#xff0c;最后分支做完事后合并到主线上而分支的任务完成可以删掉了。为了不受其他开发人员的影响&#xff0c;你可以在主分支…

数据看板可视化

前言 这段时间一直在做可视化&#xff0c;在我的项目中有一部分是电力巡检的数据可视化。其中的数据看板比较简单&#xff0c;我将其单独抽离出来形成一个demo&#xff0c;为保密demo中数据非真实数据。先看效果。 具体效果 链接相关 浏览链接&#xff1a;http://xisite.top…

【人工智能与机器学习】——聚类(学习笔记)

&#x1f4d6; 前言&#xff1a;我们之前学习的算法均是有监督学习&#xff08;supervised learning&#xff09;&#xff0c;它的一个鲜明特征是通过给定的标签来学习从数据特征&#xff08;如图像&#xff09;到语义标签的映射关系。但在很多实际问题中&#xff0c;数据并没有…

vuex笔记

Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 调试工具&#xff1a;vue devtools Vuex就像眼镜&#xff1a;您自会知道什么时候需要它。 1、state 在store中定义数据&#xff0c;在组件中直接使用&#xff1a; 目录&#xff1a;store/index.js export defau…

相关分析与回归分析

相关与回归分析就是了解变量之间相关关系的统计方法 一.相关分析 具有相关关系的变量之间&#xff0c;如果不区分原因和结果&#xff0c;我们称之为相关分析 相关分析是看两个因素之间的相关性&#xff0c;不需要确定哪个是自变量&#xff0c;哪个是因变量&#xff0c;两个因…

RK3568 GT911触摸屏调试

屏幕规格书 需要主要硬件通信电压为&#xff1a;1.8V或者3.3V I2C通信的地址&#xff1a;0x5D 和0x40 系统上电时序&#xff1a;不同的地址&#xff0c;稍微有些差异 对应代码中如下&#xff1a; 与RK3568的硬件接口电路 DTS 配置 驱动&#xff1a;RK自带的驱动程序就可以正确工…

音视频学习 -- 弱网对抗技术相关实践

背景介绍 实时音视频通话在当前的生活中是无时不刻存在的&#xff0c;包括社交、安防、交通等等各个方面都需要。用户场景复杂多变、要求严苛、网络环境不一致等给实时音视频通话带来很大条件。我们在这方向稍微做了一些工作&#xff0c;虽然和其他大厂的优化工作相比&#xf…

Commons Collections3

省流 SerialKiller 可以通过⿊名单与⽩名单的⽅式来限制反序列化时允许通过的 类&#xff0c;其中限制了cc1和cc2中命令执行的类&#xff0c;InvokerTransformer cc3就是为了绕过对其的限制&#xff0c;这里使用的是com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter来…

基于改进的DBN降水预测方法(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 精确高效的降水预测模型可以更好地反映未来的气候&#xff0c;为管理决策提供重要参考&#xff0c;帮助人们为未来的恶劣天气做…

首个元宇宙国家?!# Tuvalu

当我们还在谈论如何设计和构建一个未来城市的时候&#xff0c;首个入驻元宇宙的国家也诞生了。太平洋岛国「图瓦卢」开始 在虚拟世界创建一个数字国家。这是个怎样的国家&#xff1f;图瓦卢是位于南太平洋的一个岛国&#xff0c;人口约为 1.2 万&#xff0c;由 9 个环形小珊瑚岛…

FKM规范静强度和疲劳强度计算分析

1. 概述 WB-FKM/WB-FKM-Weld工具包是德国CADFEM公司基于FKM规范&#xff08;德国机械协会主持和通过的机械产品强度评估规范&#xff09;的基础上&#xff0c;在ANSYS WB内开发的针对结构母材及焊缝进行静强度和疲劳强度评估的工具包。 该工具包的最大优势是&#xff1a;基于AN…

艾美捷CpG ODN系列——ODN 2006 (TLRGRADE)说明

艾美捷CpG ODN系列——ODN 2006 (TLRGRADE)&#xff1a;具有硫代磷酸酯骨架的CpG寡脱氧核苷酸&#xff08;B型&#xff09;。人和小鼠TLR9&#xff08;Toll样受体9&#xff09;的特异性配体。 艾美捷CpG ODN 丨ODN 2006 (TLRGRADE)化学性质&#xff1a; 序列&#xff1a;5-tcg…

减少win11核显占用的内存怎么操作

减少win11核显占用的内存如何操作是很多小伙伴反应的问题&#xff0c;当我们的电脑新安装完win11的时候会发现系统的内存占用比较高&#xff0c;但是自己却没有开任何的占用高的软件&#xff0c;下面小编给大家分享一下减少win11核显占用的内存操作方法吧&#xff0c;以便解决大…

音视频编解码 -- 编码参数 CRF

之前多多少少接触过一些编解码参数&#xff0c;CRF 参数也用过&#xff0c;但是最近在和朋友们聊天时&#xff0c;说到使用 FFMPEG 过程中碰到 CRF 参数&#xff0c;以及具体作用流程&#xff0c;这个之前一直没有跟踪过&#xff0c;也没有详细记录过&#xff0c;所以吊起了自己…