javascript 的奇技巧淫二

news2024/11/15 13:49:57

文章目录

    • 1 、标记模板文字
    • 2、使用 Object.entries() 和 Object.fromEntries()
    • 3、用于唯一元素的 Set 对象
    • 4、对象中的动态属性名称
    • 5、使用 bind() 进行函数柯里化
    • 6、使用 Array.from() 从类似数组的对象创建数组
    • 7、可迭代对象的 for…of 循环
    • 8、使用 Promise.all() 实现并发 Promise
    • 9、函数参数的 Rest 参数
    • 10、用于性能优化的记忆化
    • 11、使用 ^ 交换值
    • 12、使用 flat() 展平数组
    • 13、使用一元加法转换为数字
    • 14、HTML 片段的模板字符串
    • 15、使用 Object.assign() 合并对象
    • 16、短路默认值
    • 17、使用括号表示法动态访问对象属性
    • 18、使用 Array.includes() 进行存在性检查
    • 19、Function.prototype.bind() 的强大功能
    • 20、防止对象修改


1 、标记模板文字

// 使用模板文字进行函数调用,以进行自定义字符串处理。
let price = 10;
console.log(highlight`The price is ${price} dollars.`);

2、使用 Object.entries() 和 Object.fromEntries()

// 将对象转换为数组并转换回来,以便于操作。
let person = {name: "Alice", age: 25};
let entries = Object.entries(person);
let newPerson = Object.fromEntries(entries);

3、用于唯一元素的 Set 对象

// 使用 Set 存储任何类型的唯一值。
let numbers = [1, 1, 2, 3, 4, 4];
let uniqueNumbers = [...new Set(numbers)];

4、对象中的动态属性名称

// 在对象文字表示法中使用方括号来创建动态属性名称。
let dynamicKey = 'name';
let person = {[dynamicKey]: "Alice"};

5、使用 bind() 进行函数柯里化

// 创建一个新函数,当调用该函数时,将其this关键字设置为提供的值。
function multiply(a, b) {
 return a * b;
}
let double = multiply.bind(null, 2);
console.log(double(5)); // 10

6、使用 Array.from() 从类似数组的对象创建数组

// 将类似数组或可迭代的对象转换为真正的数组。
let nodeList = document.querySelectorAll('div');
let nodeArray = Array.from(nodeList);

7、可迭代对象的 for…of 循环

// 直接迭代可迭代对象(包括数组、映射、集合等)。
for (let value of ['a', 'b', 'c']) {
 console.log(value);
}

8、使用 Promise.all() 实现并发 Promise

// 同时运行多个 Promise 并等待所有 Promise 完成。
let promises = [fetch(url1), fetch(url2)];
Promise.all(promises)
.then(responses => console.log('All done'));

9、函数参数的 Rest 参数

// 将任意数量的参数捕获到数组中。
function sum(...nums) {
   return nums.reduce((acc, current) => acc + current, 0);
}

10、用于性能优化的记忆化

// 存储函数结果以避免冗余处理。
const memoize = (fn) => {
    const cache = {};
    return (...args) => {
        let n = args[0]; // assuming single argument for simplicity
        if (n in cache) {
            console.log('Fetching from cache');
            return cache[n];
        } else {
            console.log('Calculating result');
            let result = fn(n);
            cache[n] = result;
            return result;
        }
    };
};

11、使用 ^ 交换值

// 使用 XOR 按位运算符交换两个变量的值,无需临时变量。
let a = 1, b = 2;
a ^= b; b ^= a; a ^= b; // a = 2, b = 1

12、使用 flat() 展平数组

// 使用 flat() 方法轻松展平嵌套数组,展平深度作为可选参数。
let nestedArray = [1, [2, [3, [4]]]];
let flatArray = nestedArray.flat(Infinity);

13、使用一元加法转换为数字

// 使用一元加法运算符快速将字符串或其他值转换为数字。
let str = "123";
let num = +str; // 123 as a number

14、HTML 片段的模板字符串

// 使用模板字符串创建 HTML 片段,使动态 HTML 生成更清晰。
let items = ['apple', 'orange', 'banana'];
let html = `<ul>${items.map(item => `<li>${item}</li>`).join('')}</ul>`;

15、使用 Object.assign() 合并对象

// 将多个源对象合并为目标对象,有效地组合它们的属性。
let items = ['apple', 'orange', 'banana'];
let html = `<ul>${items.map(item => `<li>${item}</li>`).join('')}</ul>`;

16、短路默认值

// 处理可能未定义或为空的变量时,利用逻辑运算符分配默认值。
let options = userOptions || defaultOptions;

17、使用括号表示法动态访问对象属性

// 使用括号表示法动态访问对象的属性,当属性名称存储在变量中时很有用。
let book = "name";
let value = book[property]; // Equivalent to person.name

18、使用 Array.includes() 进行存在性检查

// 使用 includes() 检查数组是否包含某个值,这是 indexOf 的更清晰的替代方案。
if (myArray.includes("value")) {
   // Do something
}

19、Function.prototype.bind() 的强大功能

// 将函数绑定到上下文(此值)并部分应用参数,创建更可重用和模块化的代码。
const greet = function(greeting, punctuation) {
 return `${greeting}, ${this.name}${punctuation}`;
};
const greetJohn = greet.bind({name: 'John'}, 'Hello');
console.log(greetJohn('!')); // "Hello, John!"

20、防止对象修改

// 使用 Object.freeze() 防止对对象的修改,使其不可变。为了实现更深层次的不变性,请考虑更彻底地实施不变性的库。
let obj = { name: "Immutable" };
Object.freeze(obj);
obj.name = "Mutable"; // Fails silently in non-strict mod

在这里插入图片描述

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

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

相关文章

SpringBoot下载resources目录下的文件

1.引入SpringBoot和hutool依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.22</version></dependency>2.在项目resources目录下放入模版文件&#xff0c;结构如下&#xff1a…

JavaScript基础(30)_事件的冒泡、事件的委派

事件的冒泡(Bubble) 所谓的冒泡指的是事件的向上传导&#xff0c;当后代元素上的事件被触发时&#xff0c;其祖先元素的“相同事件”也会被触发。 取消事件冒泡 在开发中大部分情况冒泡都是有用的&#xff0c;如果不希望发生事件冒泡可以通过事件对象来取消冒泡。取消冒泡代码…

数字货币走势分析两点最关键,比特币BTC竞猜策略共享

目前虚拟货币市场成为各界关注的焦点&#xff0c;比特币的未来也会随着相关的决策和政策而产生变化&#xff0c;多位专家是看好这个市场的潜力的。如果比特币随后可以得到更多开采和推广的话&#xff0c;全球加密货币领域的高度还会提升。目前各方对于比特币和加密货币咨询和了…

OpenAI降低人们的期望值 今年秋季的DevDay不会公布GPT-5

去年&#xff0c;OpenAI 在旧金山举行了一场声势浩大的新闻发布会&#xff0c;会上该公司发布了一系列新产品和工具&#xff0c;其中包括类似 App Store 的GPT 商店。不过&#xff0c;今年的活动将更加低调。本周一&#xff0c;OpenAI 表示它将改变 DevDay 大会的形式&#xff…

使用visual studio code远程连接虚拟机

1. 安装Remote-SSH插件 打开vscode&#xff0c;在“扩展商店”中搜索“Remote-SSH”&#xff0c;然后点击“安装”即可&#xff0c;如图所示。 2. 配置SSH 如图所示&#xff0c;点击“远程资源管理器”&#xff0c;点击“新建远程”&#xff0c;然后在输入框中输入如下指令。…

革新出行体验:音频定位导航系统引领智能导航新时代

在科技日新月异的今天&#xff0c;出行方式正经历着前所未有的变革。从传统的纸质地图到GPS视觉导航&#xff0c;再到如今日益兴起的音频定位导航系统&#xff0c;每一次进步都极大地提升了人们的出行便捷性与安全性。音频定位导航系统&#xff0c;作为智能导航领域的创新之作&…

css仿el-tabs标签页效果

需求&#xff1a;el-tabs很多时候需要改间距或者下划线上还要加组件什么的比较麻烦&#xff0c;手写一个自己根据需求更改即可 1.效果 2.主要代码详解 主要代码如下&#xff1a;active是下划线&#xff0c;activeitem是选中后改变字体颜色&#xff0c; item- (index 1),用ite…

用.net core简易搭建webapi托管到IIS

1、从官网下载.NET Core 托管捆绑包 https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?viewaspnetcore-8.0&tabsvisual-studio 2、新建ASP.NET Core WEB API项目 新建控制器TestController并生成GetInfo方法 3、发布 目标路径选择 2)显示所有…

花小钱、办大事的巴黎奥运会,能学点啥?|易搭云

“获得奥运会举办权的竞争几乎和体育赛事本身一样激烈。”众所周知&#xff0c;奥运会不仅能带来巨大的经济效益&#xff0c;更是国家实力和文化底蕴的彰显。时隔百年&#xff0c;奥运会的主会场又回到了巴黎&#xff0c;以浪漫著称的巴黎&#xff0c;奥运会突出的关键词却变成…

使用Cisco进行模拟RIP路由协议配置

实验四 RIP路由协议配置 文章目录 实验四 RIP路由协议配置1.实验目的2.实验流程3.RIPv1实验步骤4.RIPv2实验步骤 1.实验目的 1&#xff09;理解RIP路由的原理 2&#xff09;掌握RIP路由的配置方法 2.实验流程 开始→布置拓扑→配置IP地址→配置并验证RIPv1→配置并验证RIPv2…

SQL-锁

一.锁的介绍 锁是计算机协调多个进程或线程并发访问一资源的机制。在数据中,除传统的计算资源(CPU,RAM,I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性,有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因…

[io]进程间通信 -信号概念、分类、工作原理

概念、工作原理&#xff1a; 信号是一种异步通信机制&#xff0c;用于在不同进程之间传递事件信息 信号的产生&#xff1a;包括对前台进程用户输入&#xff08;CtrlC&#xff09;、系统状态变化硬件异常&#xff08;如内存访问错误&#xff09;、终端系统调用&#xff08;kil…

【JVM基础13】——垃圾回收-详细聊一下G1垃圾回收器

目录 1- 引言&#xff1a;G1垃圾回收器2- ⭐核心&#xff1a;详解 G1 垃圾回收器2-1 概述G1垃圾回收器2-2 新生代垃圾回收 Young Collection第一次新生代垃圾回收第二次新生代垃圾回收 2-3 并发标记阶段 Young Collection Concurrent Mark2-4 Mixed Collection&#xff08;混合…

中影国际影城使用的多联机空调集中管理系统

多联机空调集中管理系统 建筑能耗约占我国经济总能耗的30&#xff05;&#xff0c;而空调能耗占据建筑物总能耗的50%-70%&#xff0c;即中央空调的能耗约占国民经济能耗的两成。多联机集中控制管理系统&#xff0c;在节能降耗方面具有杰出的性能。 项目案例&#xff1a;中影国…

安卓控件RecyclerVieW

文章目录 导入依赖简单使用实现横向滚动瀑布式 RecyclerView是官方在5.0之后新添加的控件&#xff0c;推出用来替代ListView和GridView的列表控件。为了保证RecyclerView在所有Android系统版本上都能使用。Google将RecyclerView控件定义在了AndroidX中&#xff0c;只需要在项目…

三品PLM项目管理系统与CAD集成的实施指南

随着信息化技术的飞速发展&#xff0c;PLM产品生命周期管理系统与CAD三维计算机辅助设计软件的集成已成为企业研发创新的关键。本文将探讨PLM与三维CAD集成的重要性、实施要素、策略以及实际应用案例&#xff0c;为企业信息化建设提供参考。 PLM与三维CAD集成&#xff1a;信息化…

SQL进阶技巧:有序行转列问题如何保证不同字段内容有序性及内容一一对应?【collect_list函数有序性保证问题】

目录 0 问题描述【小红书面试题】 1 数据准备 2 问题分析 3 小结 0 问题描述【小红书】 有如下需求,需要将左边的表变换成右边的表,注意字段内容的顺序及对应内容的一致性。 第一个字段为name,第二个字段为subject,第三个字段为score,变换后要求subject按照语文、数学…

揭秘——DNS究竟是什么?

我们来聊聊网络世界中的一个重要角色——DNS。准备好了吗&#xff1f;让我们一起揭开DNS的神秘面纱吧&#xff01; DNS是什么&#xff1f; DNS&#xff0c;全称为域名系统&#xff08;Domain Name System&#xff09;&#xff0c;是互联网的一项核心服务。简单来说&#xff0…

IP地址HTTPS证书怎么申请?

IP地址证书的申请和部署是网络安全领域中一个特定而重要的环节&#xff0c;主要针对那些没有域名但需要确保通信安全的场景。下面将深入探讨IP地址证书申请部署的特点&#xff0c;包括无需域名、简化管理、准确填写信息、验证所有权、安装配置和测试验证等步骤。具体分析如下&a…

简单易懂的LLM三角原则,让你轻松开发大模型应用

不少朋友偷偷问我&#xff1a;“什么是LLM的三角原则&#xff1f;”今天就给大家仔细讲讲构建LLM应用的三角原则。这套原则其实不复杂&#xff0c;由“31”(一范式三原则)个基础组成&#xff0c;适合任何团队来实践。 说到以LLM为核心的应用&#xff0c;有不少人以为是高大上的…