分享几个我珍藏的JS冷门但实用的技巧

news/2025/10/30 9:04:41/文章来源:https://www.cnblogs.com/mygctong/p/19175877

作为一名前端开发者,我在日常工作中发现了一些不太常见但极其实用的JavaScript技巧。这些技巧帮我解决了不少棘手问题,今天就来分享给大家。

1. 使用 ??= 进行逻辑空赋值

你可能熟悉 ||=,但 ??= 才是更精准的选择。它只在变量为 nullundefined 时才赋值:

// 传统写法
let user = { name: "小明" };
if (user.age === null || user.age === undefined) {user.age = 18;
}// 使用 ??=
user.age ??= 18; // 仅在 age 为 null 或 undefined 时赋值

||= 不同,??= 不会在值为 0false 或空字符串时覆盖,这在实际开发中更加安全。

2. 利用 Intl 对象进行本地化处理

处理日期、数字和货币格式化时,Intl 对象是我的秘密武器:

// 数字格式化
const number = 1234567.89;
console.log(new Intl.NumberFormat('zh-CN').format(number)); // "1,234,567.89"// 货币格式化
console.log(new Intl.NumberFormat('zh-CN', { style: 'currency', currency: 'CNY' }).format(number)
); // "¥1,234,567.89"// 相对时间格式化(这个特别实用)
const rtf = new Intl.RelativeTimeFormat('zh-CN', { numeric: 'auto' });
console.log(rtf.format(-1, 'day')); // "昨天"
console.log(rtf.format(5, 'hour')); // "5小时后"

3. 使用 flatMap 进行过滤和映射

我经常用 flatMap 来替代 filter + map 的组合,代码更简洁:

const numbers = [1, 2, 3, 4, 5];// 传统方式:筛选偶数并加倍
const result1 = numbers.filter(n => n % 2 === 0).map(n => n * 2);// 使用 flatMap:一步到位
const result2 = numbers.flatMap(n => n % 2 === 0 ? [n * 2] : []
);console.log(result1); // [4, 8]
console.log(result2); // [4, 8] 结果相同!

4. 标签模板字面量的妙用

除了基本的字符串插值,标签模板还能做很多有趣的事情:

// 简单的SQL转义(注意:生产环境请使用专业库)
function sql(strings, ...values) {return strings.reduce((result, str, i) => {const value = values[i] !== undefined ? `'${String(values[i]).replace(/'/g, "''")}'` : '';return result + str + value;}, '');
}const userId = 123;
const userName = "O'Reilly";
const query = sql`SELECT * FROM users WHERE id = ${userId} AND name = ${userName}`;
console.log(query); 
// "SELECT * FROM users WHERE id = '123' AND name = 'O''Reilly'"

5. 使用 Proxy 实现优雅的对象监听

Proxy 让我能够创建具有自定义行为的对象:

function createObservable(target, callback) {return new Proxy(target, {set(obj, prop, value) {const oldValue = obj[prop];obj[prop] = value;callback(prop, oldValue, value);return true;}});
}const user = createObservable({ name: "小明" }, (prop, oldVal, newVal) => {console.log(`属性 ${prop} 从 ${oldVal} 变为 ${newVal}`);
});user.name = "小红"; // 控制台输出: "属性 name 从 小明 变为 小红"
user.age = 18;     // 控制台输出: "属性 age 从 undefined 变为 18"

6. 利用 WeakMap 实现私有属性

在ES6类中实现真正的私有属性:

const privateData = new WeakMap();class Person {constructor(name, age) {// 将私有数据存储在WeakMap中,键为当前实例privateData.set(this, { name, age });}getName() {return privateData.get(this).name;}getAge() {return privateData.get(this).age;}
}const person = new Person("小明", 25);
console.log(person.getName()); // "小明"
console.log(person.name);      // undefined - 真正私有的!

7. 使用 Array.from 进行复杂数组操作

Array.from 的第二个参数是个映射函数,功能强大:

// 创建数字序列
const range = (start, end) => Array.from({ length: end - start + 1 }, (_, i) => start + i);console.log(range(5, 10)); // [5, 6, 7, 8, 9, 10]// 创建字母序列
const alphabet = (start, end) => Array.from({ length: end.charCodeAt(0) - start.charCodeAt(0) + 1 }, (_, i) => String.fromCharCode(start.charCodeAt(0) + i));console.log(alphabet('A', 'F')); // ['A', 'B', 'C', 'D', 'E', 'F']

8. 使用 Object.fromEntries 进行对象转换

这个方法是 Object.entries 的逆操作,非常适合数据转换:

// 将URL查询参数转换为对象
const queryString = "name=小明&age=25&city=北京";
const searchParams = new URLSearchParams(queryString);
const queryObject = Object.fromEntries(searchParams);
console.log(queryObject); 
// { name: "小明", age: "25", city: "北京" }// 数组转对象
const pairs = [['width', 100], ['height', 200]];
const dimensions = Object.fromEntries(pairs);
console.log(dimensions); // { width: 100, height: 200 }

结语

这些技巧在我日常开发中帮了大忙,希望它们对你也有所启发。JavaScript的世界总是在不断进化,保持学习和探索的心态,你会发现更多有趣的特性。

如果你也有什么珍藏的JS技巧,欢迎在评论区分享!

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

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

相关文章

2025年靠谱的履带式抛丸机厂家推荐及选购指南

2025年靠谱的履带式抛丸机厂家推荐及选购指南开篇介绍履带式抛丸机作为现代工业表面处理的核心设备,广泛应用于铸造、锻造、机械制造等领域。随着2025年制造业智能化升级的加速,选择一家技术领先、服务可靠的抛丸机厂…

Java流程控制——while循环结构以及Dowhile

Java流程控制——while循环结构以及Dowhilewhile循环结构 while(布尔表达值){ //循环内容 } 关键点 1.布尔表达式为true,循环就一直进行 2.需要让表达式失效的方式来结束循环 3.少部分情况需要循环一直执行,如服务器…

Last Call!对话式 AI 和对话式人类聚集!RTE Open Day@RTE2025,10.31/11.1,北京

对话式 AI 和对话式人类聚集!2025 年 10 月 31 日~11 月 1 日,由声网和 RTE 开发者社区联合主办的 Convo AI&RTE2025「实时互联网大会暨对话式 AI 论坛」 将在北京悠唐皇冠假日酒店正式开启!RTE Open Day 携手近…

2025年矿用链条厂家权威推荐榜单:起重链条/刮板机/链轮源头厂家精选

在矿山机械领域,一条高质量的链条承载着千钧重担,也连接着生产安全与效率。 矿用链条作为矿山机械的关键基础部件,其质量与性能直接影响设备运行效率和安全生产。随着2025年全球矿山机械市场的持续扩张,矿用链条市…

基于C++实现GPS捷联惯性组合导航系统

一、系统架构设计 1.1 模块划分 // 核心模块交互图 +-------------------+ +-------------------+ +-------------------+ | 传感器数据采集层 | →→→→→ | 导航解算核心层 | →→→→→ | 数据输出…

Ubantu下创建虚拟环境的一些经验

今天在进行论文复现的项目中进行了论文代码复现,但是在配置过程中发现,出现了无法使用pip安装包的情况 之后就上网进行求助,寻找原因给出的答案竟然是,Linux为了防止不同的包会出现依赖冲突,所以强制要求你去使用…

数据仓库设计的核心:数据域的构建方法与实战

在数据仓库的构建过程中,面对来源多样、结构各异的海量数据,如何对其进行有效的梳理和组织,是确保数据仓库具备良好可扩展性、可维护性和高应用价值的关键。数据域是组织数据模型、支撑指标开发与数据治理的核心逻辑…

[题解]P3082 [USACO13MAR] Necklace G

P3082 [USACO13MAR] Necklace G 原问题等价于求 \(A\) 中最多能保留多少多少元素,使得 \(B\) 不是它的子串,再用 \(n\) 去减一下。 贪心地找 \(B\) 出现的位置统计是错误的。比如 aaabbbbbb ab 的答案是 \(3\)。 考虑…

2025年热门的电动观光车厂家推荐及选购参考榜

2025年热门的电动观光车厂家推荐及选购参考榜随着环保意识的提升和旅游业的蓬勃发展,电动观光车已成为景区、酒店、房地产等场所不可或缺的交通工具。2025年,电动观光车市场迎来了新一轮的增长,众多厂家纷纷推出创新…

Python3 pyecharts 模块:数据可视化的高效利器

Python3 pyecharts 模块:数据可视化的高效利器在数据驱动决策的时代,将复杂数据转化为直观图表的能力至关重要。pyecharts 作为 Python 生态中一款优秀的数据可视化库,以其简洁的 API 设计、丰富的图表类型和良好的…

2025年知名的金钻绒厂家选购指南与推荐

2025年知名的金钻绒厂家选购指南与推荐 在纺织行业中,金钻绒因其柔软舒适、保暖性强、耐用性高等特点,广泛应用于家纺、服装、汽车内饰等领域。随着消费者对高品质面料需求的提升,选择一家可靠的金钻绒供应商至关重…

项目效率翻倍,做对了什么?

以前还在厂里搬砖的时候,厌烦各种花里胡哨的项目和流程管理,当自己开始折腾项目,曾经讨厌的事情依旧讨厌,但是绝对的理解和认可,独立做产品,这么一个弱小的项目,都踩了一个又一个坑。从手忙脚乱,到游刃有余。【…

深入理解RESTful API设计

后端开发在现代Web应用中的角色至关重要,而RESTful API(Representational State Transfer)已经成为开发者创建和管理后端服务的标准方式之一。本文将详细介绍RESTful API的概念、设计原则,并通过Node.js与Express框…

2025年可靠的机器人装箱机厂家最新TOP排行榜

2025年可靠的机器人装箱机厂家最新TOP排行榜 随着工业4.0的深入推进,机器人装箱机在食品、医药、电子、日化等行业的应用越来越广泛。选择一家技术先进、服务可靠的机器人装箱机厂家,不仅能提高生产效率,还能降低人…

2025 年粘合剂厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析型煤复合/污泥球团/矿粉球团/矿粉粘合剂公司推荐

引言 随着冶金、环保等行业对粘合剂性能要求不断提升,为助力企业精准筛选优质供应商,冶金炉料工业协会联合环保型煤产业联盟开展 2025 年度粘合剂品牌测评。本次测评覆盖全国 120 余家源头厂家,采用 “技术指标(40…

2025年质量好的混纺丝绒最新TOP厂家排名

2025年质量好的混纺丝绒最新TOP厂家排名在纺织行业中,混纺丝绒因其柔软舒适、耐用性强、色彩丰富等特点,广泛应用于服装、家纺、装饰等领域。随着消费者对品质要求的提升,选择一家可靠的混纺丝绒供应商至关重要。本…

Laravel 新项目避坑指南10 大基础设置让代码半年不崩

Laravel 新项目避坑指南10 大基础设置让代码半年不崩 有没有遇到过这种 Laravel 项目:刚上线那会儿干干净净,过三个月就变成无法收拾的灾难?Controller 动不动就 500 多行、慢得要命的数据库查询随处可见,甚至有人…

2025 年 10 月阳台光伏,阳台光伏逆变器,阳台光伏板,阳台光伏发电厂家最新推荐,产能、专利、环保三维数据透视!

引言 2025 年作为国内阳台光伏 “元年”,市场迎来爆发式增长,前三季度家庭装机量突破 62 万户,但 350 余个品牌中仅 17% 通过光伏行业协会《家庭分布式光伏系统质量评价规范》全项认证,阳台光伏逆变器、光伏板及光…

2025年知名的激光灯厂家最新推荐排行榜

2025年知名的激光灯厂家最新推荐排行榜在当今舞台灯光、婚礼庆典、户外演出和文旅亮化等领域,激光灯已成为不可或缺的重要设备。随着技术的不断进步和市场需求的增长,激光灯厂家如雨后春笋般涌现。本文将为您推荐202…

2025年知名的双头离子风机TOP实力厂家推荐榜

2025年知名的双头离子风机TOP实力厂家推荐榜 在工业4.0和智能制造快速发展的背景下,静电防护设备的需求日益增长,尤其是双头离子风机作为关键设备,广泛应用于半导体、光电、PCBA等精密制造领域。选择一家技术领先、…