前端 JS 实用操作总结

news2024/12/23 3:37:24

目录

1、重构解构

1、数组解构

2、对象解构

3、...展开

2、箭头函数

1、简写

2、this指向

3、没有arguments

4、普通函数this的指向

3、数组实用方法

1、map和filter

2、find

3、reduce


1、重构解构

1、数组解构
    const arr = ["唐僧", "孙悟空", "猪八戒", "沙和尚"]
    const [a, b] = arr
    console.log(a, b)
    //打印  唐僧 孙悟空
    const [a, b, c] = arr
    console.log(a, b, c)
    //打印  唐僧 孙悟空 猪八戒
    const [a, b, , d] = arr  //跳过元素
    console.log(a, b, c, d)
    //打印  唐僧 孙悟空 沙和尚
    const [a, b, ...c] = arr
    console.log(c)
    //打印  [猪八戒,沙和尚]
2、对象解构
    const obj = {
        name: "Jack",
        age: 18,
        like: "jogging"
    }

    let a, b, c
    ({name: a, age: b, like: c} = obj)  //可读性差,不建议这样写
    console.log(a, b, c)
    //打印 Jack 18 jogging
    const {name, age, like} = obj
    console.log(name, age, like)
    //打印 Jack 18 jogging
3、...展开
    //只要是可以遍历的对象,就可以通过...展开

    function fn(a, b, c) {
        return a + b + c
    }

    const arr = [1, 2, 3]

    let res = fn(...arr)
    console.log(res)
    //打印 6

数组拼接:

    //数组拼接
    const arr = [1, 2, 3]
    let arr2 = [...arr, 4, 5]
    console.log(arr2)
    //打印 [1, 2, 3, 4, 5]

将obj里的值在新对象中展开,相当于浅拷贝

    const obj = {
        name: "Jack",
        age: 18,
        like: "jogging"
    }

    const obj2={...obj}  //将obj里的值在新对象中展开,相当于浅拷贝
    console.log(obj2)
    //打印 {name: 'Jack', age: 18, like: 'jogging'}

拼接对象:

    const obj2 = {...obj, sex: "male"}
    console.log(obj2)
    //打印 {name: 'Jack', age: 18, like: 'jogging', sex: 'male'}

若有重复的属性,后面的会直接覆盖前面的属性,这里的name属性被后面的覆盖了:

    const obj2 = {...obj, sex: "male", name: "Mark"}
    console.log(obj2)
    //打印 {name: 'Mark', age: 18, like: 'jogging', sex: 'male'}

2、箭头函数

特点:传统函数的简写

(1)箭头函数没有自己的this,箭头函数里的this用的是父级作用域里的this

(2)箭头函数中没有实参arguments

(3)不能作为构造函数调用

(4)箭头函数的this,一旦确定后是无法更改的,无法使用call、bind、apply来修改this指向

1、简写
    //非0结尾的函数是对应简写
    //返回值必须是一个表达式才能简写
    //若返回值是对象必须加()
    const getObj0 = () => {
        return {name: "Jack"}
    }
    const getObj = () => ({name: "Jack"})

    const sum0 = (a, b, c) => {
        return a + b + c
    }
    const sum = (a, b, c) => a + b + c

    const logTxt0 = a => {
        console.log(a)
    }
    const logTxt = a => console.log(a)

    const getData0 = () => {
        return "abc"
    }
    const getData = () => "abc"
2、this指向

测试箭头函数的this指向:

    const go = () => {
        console.log(this)
    }

    function Man() {
        const go = () => {
            console.log(this)
        }
        return {go}
    }

    let man = new Man()
    man.go()

    go()

打印:可以得出:箭头函数没有自己的this,箭头函数里的this用的是父级作用域里的this。

3、没有arguments

测试arguments实参:

    const go = (a, b, ...arg) => {
        try {
            console.log(arguments)
        } catch (error) {
            console.log("go没有arguments")
        }
    }

    function drive(a, b, ...arg) {
        console.log("function:", arguments)
    }

    go("a", "b", "c", "d", "e")

    drive("a", "b", "c", "d", "e")

打印:可以得出箭头函数并没有arguments实参,直接写肯定报错。

4、普通函数this的指向

首先在严格模式下测试:

<script>
    "use strict"

    function drive(a, b, ...arg) {
        console.log(this)
    }

    drive("a", "b")
</script>

打印:在严格模式下普通函数在全局中的this为undefined

非严格模式下:

<script>
    function drive(a, b, ...arg) {
        console.log(this)
    }

    drive("a", "b")
</script>

打印:在全局下为Window对象

其他情况下,不论是严格函数非严格模式,普通函数的this指向都是依调用者来定,即谁调用就指向谁:

    "use strict"

    function User() {
        function go() {
            console.log(this)
        }

        return {go}
    }

    const user = new User()

    user.go()

打印:

3、数组实用方法

1、map和filter
    const arr = [1, 2, 3, 4, 5, 6, 7]
    /**
     * @param value 每项元素
     * @param index 元素的索引
     * @param array 原数组
     */
    const newArr = arr.map((value, index, array) => value + array[index])
    console.log("map会生成一个遍历后的新数组", newArr)

    /**
     * @param value 每项元素
     * @param index 元素的索引
     * @param array 原数组
     * 选项返回true则留,返回false则剔除,会生成一个由留下元素生成的数组
     */
    const newFilterArr = arr.filter((value, index, array) => value % 2 === 0)
    console.log("会生成一个由留下元素生成的数组,偶数的数组:", newFilterArr)

打印:

2、find

与filter类似,选项返回true则留,返回false则剔除;不同在于,find查找到一个选项后,就立即返回停止执行了。

    const arr = [1, 2, 3, 4, 5, 6, 7]

    /**
     * @param value 每项元素
     * @param index 元素的索引
     * @param array 原数组
     * 与filter类似,选项返回true则留,返回false则剔除
     * 不同在于,find查找到一个就立即返回停止执行了
     */
    const item = arr.find((value, index, array) => value % 2 === 0)
    console.log(item)

打印:

3、reduce

这个方法可以用来整合数组,他可以对数组中的值进行计算,最终数组中的所有元素合并为一个值。使用场景,累加、累乘等。

prev: 上一次运算结果

curr: 当前项

index: 当前索引

array: 原数组

const arr = [1, 2, 3, 4, 5, 6, 7]

    /**
     * @param prev 上一次运算结果
     * @param curr 当前元素
     */
    const result = arr.reduce((prev, curr) => {
        console.log(prev, curr)
        return prev + curr
    })
    console.log("result",result)
</script>

打印:

也可以给它指定一个prev的初始值:

     const arr = [1, 2, 3, 4, 5, 6, 7]

    const result = arr.reduce((prev, curr, index) => {
        console.log(index, prev, curr)
        return prev + curr
    }, 9)
    console.log("result", result)

打印:

后续再添加。

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

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

相关文章

力扣 LeetCode 541. 反转字符串II(Day4:字符串)

解题思路&#xff1a; i可以成段成段的跳&#xff0c;而不是简单的i class Solution {public String reverseStr(String s, int k) {char[] ch s.toCharArray();// 1. 每隔 2k 个字符的前 k 个字符进行反转for (int i 0; i < ch.length; i 2 * k) {// 2. 剩余字符小于 …

鸿蒙版APP-图书购物商城案例

鸿蒙版-小麦图书APP是基于鸿蒙ArkTS-API12环境进行开发&#xff0c;不包含后台管理系统&#xff0c;只有APP端&#xff0c;页面图书数据是从第三方平台(聚合数据)获取进行展示的&#xff0c;包含登录&#xff0c;图书类别切换&#xff0c;图书列表展示&#xff0c;图书详情查看…

卡尔曼滤波:从理论到应用的简介

卡尔曼滤波&#xff08;Kalman Filter&#xff09;是一种递归算法&#xff0c;用于对一系列噪声观测数据进行动态系统状态估计。它广泛应用于导航、控制系统、信号处理、金融预测等多个领域。本文将介绍卡尔曼滤波的基本原理、核心公式和应用案例。 1. 什么是卡尔曼滤波&#x…

学习日志011--模块,迭代器与生成器,正则表达式

一、python模块 在之前学习c语言时&#xff0c;我们学了分文件编辑&#xff0c;那么在python中是否存在类似的编写方式&#xff1f;答案是肯定的。python中同样可以实现分文件编辑。甚至还有更多的好处&#xff1a; ‌提高代码的可维护性‌&#xff1a;当代码被分成多个文件时…

CSS 语法规范

基本语法结构 CSS 的基本语法结构包含 选择器 和 声明块,两者共同组成 规则集。规则集可以为 HTML 元素设置样式,使页面结构和样式实现分离,便于网页的美化和布局调整。 CSS 规则集的结构如下: selector {property: value; }选择器(Selector) 选择器用于指定需要应用…

Bag Graph: Multiple Instance Learning Using Bayesian Graph Neural Networks文献笔记

基本信息 原文链接&#xff1a;[2202.11132] Bag Graph: Multiple Instance Learning using Bayesian Graph Neural Networks 方法概括&#xff1a;用图&#xff08;贝叶斯GNN框架&#xff09;来建模袋之间的相互作用&#xff0c;并使用图神经网络&#xff08;gnn&#xff09…

Spark 共享变量:广播变量与累加器解析

Spark 的介绍与搭建&#xff1a;从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交&#xff1a;本地与集群模式全解析-CSDN博客 Spark on YARN&#xff1a;Spark集群模式…

前海华海金融创新中心的工地餐点探寻

​前海的工地餐大部分都是13元一份的哈。我在前海华海金融创新中心的工地餐点吃过一份猪杂饭&#xff0c;现做13元一份。我一般打包后回公司吃或直接桂湾公园找个环境优美的地方吃饭。 ​我点的这份猪杂汤粉主要是瘦肉、猪肝、肉饼片、豆芽和生菜&#xff0c;老板依旧贴心问需要…

借助Excel实现Word表格快速排序

实例需求&#xff1a;Word中的表格如下图所示&#xff0c;为了强化记忆&#xff0c;希望能够将表格内容随机排序&#xff0c;表格第一列仍然按照顺序编号&#xff0c;即编号不跟随表格行内容调整。 乱序之后的效果如下图所示&#xff08;每次运行代码的结果都不一定相同&#x…

【C语言指南】C语言内存管理 深度解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C语言指南》 期待您的关注 引言 C语言是一种强大而灵活的编程语言&#xff0c;为程序员提供了对内存的直接控制能力。这种对内存…

【Linux网络编程】简单的UDP网络程序

目录 一&#xff0c;socket编程的相关说明 1-1&#xff0c;sockaddr结构体 1-2&#xff0c;Socket API 二&#xff0c;基于Udp协议的简单通信 一&#xff0c;socket编程的相关说明 Socket编程是一种网络通信编程技术&#xff0c;它允许两个或多个程序在网络上相互通信&…

Kafka入门:Java客户端库的使用

在现代的分布式系统中&#xff0c;消息队列扮演着至关重要的角色&#xff0c;而Apache Kafka以其高吞吐量、可扩展性和容错性而广受欢迎。本文将带你了解如何使用Kafka的Java客户端库来实现生产者&#xff08;Producer&#xff09;和消费者&#xff08;Consumer&#xff09;的基…

STM32设计学生宿舍监测控制系统

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 随着科技的飞速发展和智能化时代的到来&#xff0c;学生宿舍的安全、舒适…

HTML5实现俄罗斯方块小游戏

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面1.3 游戏结束界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/143788449 HTML5实现俄罗斯方块小游戏&#x…

自由学习记录(22)

最后再总结一下吧 虽然过程里很多细节也许我没有去管&#xff0c;毕竟现在就已经存在更好的解决方案了 但大致思想是了解了 A星是一种网格上的遍历方式&#xff0c;为了找到一个目标点和起点之间的要经过的最短节点组 里面更像是动态规划 每一次的遍历&#xff0c;都是当前…

UNIX网络编程-TCP套接字编程(实战)

概述 TCP客户端/服务器程序示例是执行如下步骤的一个回射服务器&#xff1a; 客户端从标准输入读入一行文本&#xff0c;并写给服务器。服务器从网络输入读入这行文本&#xff0c;并回射给客户端。客户端从网络输入读入这行回射文本&#xff0c;并显示在标准输出上。 TCP服务器…

『VUE』27. 透传属性与inheritAttrs(详细图文注释)

目录 什么是透传属性&#xff08;Forwarding Attributes&#xff09;使用条件唯一根节点禁用透传属性继承总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 什么是透传属性&#xff08;Forwarding Attributes&#xff09; 在 V…

408模拟卷较难题(无分类)

模拟卷特别是大题还是很有难度的&#xff0c;而且有些题有错&#xff0c;还是先把真题吃透&#xff0c;后面没时间的话就不整理了。 一棵树转化为二叉树&#xff0c;那么这棵二叉树一定为右子树为空的树 计算不同种形态&#xff0c;即计算6个结点的二叉树有几种形态&#xff0c…

【JavaScript】LeetCode:96-100

文章目录 96 单词拆分97 最长递增子序列98 乘积最大子数组99 分割等和子集100 最长有效括号 96 单词拆分 动态规划完全背包&#xff1a;背包-字符串s&#xff0c;物品-wordDict中的单词&#xff0c;可使用多次。问题转换&#xff1a;s能否被wordDict中的单词组成。dp[i]&#x…

安全见闻1-5

涵盖了编程语言、软件程序类型、操作系统、网络通讯、硬件设备、web前后端、脚本语言、病毒种类、服务器程序、人工智能等基本知识&#xff0c;有助于全面了解计算机科学和网络技术的各个方面。 安全见闻1 1.编程语言简要概述 C语言&#xff1a;面向过程&#xff0c;适用于系统…