当前位置:首页 > 科技  > 软件

JavaScript 中有趣的九个常用编码套路

来源: 责编: 时间:2023-08-14 22:01:17 484观看
导读这篇文章是面向新手的,但如果幸运的话,希望能给各位大佬们带来一些小小的启发。1、set对象:数组快速去重常规情况下,我们想要筛选唯一值,一般会想到遍历数组然后逐个对比,或者使用成熟的库比如lodash之类的。不过,ES6带来了

这篇文章是面向新手的,但如果幸运的话,希望能给各位大佬们带来一些小小的启发。CNw28资讯网——每日最新资讯28at.com

CNw28资讯网——每日最新资讯28at.com

1、set对象:数组快速去重

常规情况下,我们想要筛选唯一值,一般会想到遍历数组然后逐个对比,或者使用成熟的库比如lodash之类的。CNw28资讯网——每日最新资讯28at.com

不过,ES6带来了一个新玩意儿!它引入了一个全新的对象类型:Set!而且,如果结合上...展开运算符,我们可以超级快速地创建一个已经去重的全新数组!CNw28资讯网——每日最新资讯28at.com

const arr = [10, 10, 10, 20, 20, 30, 40, 40, 50, 60, 60, 70];const uniArr = [...new Set(array)];console.log(uniArr);// [10, 20, 30, 40, 50, 60, 70]

这个技巧只适用于包含基本类型的数组,比如undefined、null、boolean、string和number。CNw28资讯网——每日最新资讯28at.com

但是要记住哦,如果数组里面还有对象、函数或其他数组的话,就不能用这个方法了!CNw28资讯网——每日最新资讯28at.com

2、include方法:简化( || 或)条件判断

当我们使用逻辑运算符||进行条件判断时,如果有很多可选值,代码会变得冗长。CNw28资讯网——每日最新资讯28at.com

不过,我们可以使用includes方法来简化对数组的遍历操作,方便地判断数组是否包含某个特定的元素。CNw28资讯网——每日最新资讯28at.com

这样一来,我们就可以更简洁地列出可选值,而不必写一长串的条件判断语句。includes方法可以帮助我们轻松判断数组中是否存在指定的元素。CNw28资讯网——每日最新资讯28at.com

const myNum = '3';const numArr = ['1', '2', '3'];// 使用 || if (myNum === '1' || myNum === '2' || myNum === '3') {    //……}// 使用 includeif (numArr.includes(myNum)) {    //……}

3、截断数组:改变length就可以

操作数组时,我们通常会优先使用array对象中的高级函数。CNw28资讯网——每日最新资讯28at.com

不过,我这里要介绍一种更简单的方法来改变数组长度,我喜欢它的原因是它非常直观且易读。CNw28资讯网——每日最新资讯28at.com

只需使用length属性并传递一个数字,就可以改变数组的长度。这样做非常方便!CNw28资讯网——每日最新资讯28at.com

let array = ['1', '2', '3', '4'];array.length = 2;console.log(array); // ['1', '2']

当然 ,如果你更注重性能,还是请使用 array.slice()。CNw28资讯网——每日最新资讯28at.com

4、数字分割符:提高数字可读性

若要提高数字的可读性,你可以使用下划线作为分隔符来更好地区分数字的各个部分。这样做可以让数字更易读,让人一目了然。CNw28资讯网——每日最新资讯28at.com

const num = 1_000_000_000;console.log(num); // 1000000000

5、控制台打印:用对象包裹更清晰

在使用console.log()时,你可以将参数括在大括号中,这样可以在控制台输出时同时显示变量的名称和值。这种方式非常方便,让你更清晰地了解每个变量的内容。CNw28资讯网——每日最新资讯28at.com

const name = "道长王jj";console.log({ name });// {//     "name": "道长王jj"// }

6、短路运算:简化条件判断

if...else条件判断是代码过程中最常用的,几乎在任何情况下,我们都会快速地敲下它来控制逻辑流程。CNw28资讯网——每日最新资讯28at.com

不过,有时候我们也希望代码更加简洁、快速,不占那么多篇幅。我们想尽可能地简洁且快速,于是就会用到三元运算符:CNw28资讯网——每日最新资讯28at.com

const num = 75;const result1 = num > 100 ? '大于100' : '小于100';

但是我在这里并不是推荐使用“三元运算”,其实有时候三元运算符可能会让代码逻辑变得有点复杂哦!比如这样:CNw28资讯网——每日最新资讯28at.com

const result2 = num > 100 ? (num > 200 ? '大于200' : '介于100和200之间') : '小于100';

这个时候,使用 && 和 || 这类逻辑运算符反而能更简洁的表达算式。CNw28资讯网——每日最新资讯28at.com

举个例子:CNw28资讯网——每日最新资讯28at.com

// 假设,我们有三个已经打过分的相亲对象必须选择一个来当女朋友,使用 `&&` 可以很好的帮我们做出选择。const one = 8;const two = 9;const three = 10;// 返回10console.log(one && two && three); // 返回0console.log(0 && null);
// 当然,如果你足够独特~~(变态)~~,就是不要女朋友,如果选只选最差的,你可以使用 `||` 来帮你做吹选择。const one = 8;const two = 9;const three = 10;// 返回8console.log(one || two || three); // 返回nullconsole.log(0 || null);

哦,这个情况在工作场景中确实很常见。CNw28资讯网——每日最新资讯28at.com

假设我们想返回变量的 length ,但我们不确定接口会不会给我们需要的类型。CNw28资讯网——每日最新资讯28at.com

这个时候我们就可以使用 if/else 语句来检查是可接受的类型,但它会让我们的代码非常臃肿。CNw28资讯网——每日最新资讯28at.com

这时候,我们可以使用短路运算来简化代码,而且有极高的健壮性:CNw28资讯网——每日最新资讯28at.com

// 使用iflet temp = getArray();if (!temp) {    tempLength = 0;} else {    tempLength = temp.length}// 使用 ||// 如果变量 tempArray 为真,则将返回该变量。否则,将返回 []const temp = (tempArray || []).length;

7、可选链:更加安全地访问对象属性

你有没有遇到过访问嵌套对象属性的困扰?CNw28资讯网——每日最新资讯28at.com

就是有时候你根本不确定这个对象或者它的子属性到底存不存在,结果就报错了!以至于程序崩溃无法运行CNw28资讯网——每日最新资讯28at.com

console.log(abc.ss)// ceError: abc is not defined//     at <anonymous>:1:1// (匿名) @ VM190795

为了不让报错阻止我们的程序运行,我们通常会将它包装在一个if……else代码块中:CNw28资讯网——每日最新资讯28at.com

if (abc.ss) {  console.log(abc.ss);} else {  console.log('没有abc这个变量喏~');}// 还可以用短路运算console.log(abc && abc.ss)

不过,ES6的可选链可以让我们彻底抛弃掉上面的写法了,我们可以直接这样做:CNw28资讯网——每日最新资讯28at.com

console.log(abc?.ss?.aa?.bb?.cc)

8、巧用运算符:快速类型转换

在这之前需要科普一些小知识:CNw28资讯网——每日最新资讯28at.com

除了常规的true和false之外,其他变量也可以被当成true 或者 false。CNw28资讯网——每日最新资讯28at.com

除了0、""(空字符串)、null、undefined、NaN、false 之外呢,JavaScript中的所有其他值都是"真的"哦!CNw28资讯网——每日最新资讯28at.com

所以呢,基于这个认知。CNw28资讯网——每日最新资讯28at.com

我们可以使用负运算符 ! ,将类型转换为 "boolean" 。CNw28资讯网——每日最新资讯28at.com

const x = Boolean(expression);     // 推荐const x = !!(expression);          // 推荐const x = new Boolean(expression); // 不太好

我们可以使用连接运算符 + 后跟一组空引号 '',将类型转换为 "string" 。CNw28资讯网——每日最新资讯28at.com

const value = 12 + '';console.log(value); // '12'

我们可以使用减法运算符 -,将类型转换为 "number" 。CNw28资讯网——每日最新资讯28at.com

感谢 @hhhyyymmm 指正,我之前这里使用了加法运算符。CNw28资讯网——每日最新资讯28at.com

let myValue = '12';myValue = myValue - 1;console.log(myValue); // 11// 当然也可以转换 Boolean 变成 Number // 工作中不推荐这样用!!!!console.log(+true); // 1console.log(+false); // 0

9、快速运算:更快更简洁的数学运算操作符

以前我们在使用JavaScript进行数学运算时,总是要借助Math库进行运算。很奇怪的是,但是很多教程并没有提醒我们,ES7其实带来的全新运算符。CNw28资讯网——每日最新资讯28at.com

如果想示乘方操作,通常我们会调用Math.pow(5, 7)这个方法。但是现在我们可以使用幂运算符**了,而且性能更快更好。CNw28资讯网——每日最新资讯28at.com

console.log(5 ** 7); // 78125

如果想将浮点数转换为整数,通常我们会使用Math.floor()、Math.ceil()或Math.round()这些方法。不过,其实可以使用 | 将浮点数直接截断为整数。这个技巧可以让你的代码更简洁高效哦!CNw28资讯网——每日最新资讯28at.com

// 正数,则向下舍入console.log(34.9 | 0);  // Result: 34// 负数,则向上舍入console.log(-12.9 | 0); // Result: -12

以前我们只取千分位需要进行类型转换后才能进行取数CNw28资讯网——每日最新资讯28at.com

let str = "33545"; Number(str.substring(0, str.length - 3)); // 33

但是我们可以更优雅地这样做:CNw28资讯网——每日最新资讯28at.com

console.log(33545 / 1000 | 0)  // Result: 33

希望本文能够帮助到你, 虽然真的很基础很基础。CNw28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-5725-0.htmlJavaScript 中有趣的九个常用编码套路

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 什么是代码审查及其如何节省时间:开发人员指南

下一篇: 面试官:JavaScript中“x !== x”可以返回True吗?

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • 在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页&ldquo;充值中心&rdquo;入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的&ldquo;在线鉴别&rdquo;,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 苹果MacBook Pro 2021测试:仍不支持平滑滚动

    据10月30日9to5 Mac 消息报道,苹果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后获得了不错的评价,亮点包括行业领先的性能,令人印象深刻的电池续航,精美丰
  • 上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
  • 电博会上海尔智家模拟500平大平层,还原生活空间沉浸式体验

    电博会为了更好地让参展观众真正感受到智能家居的绝妙之处,海尔智家的程传岭先生同样介绍了展会上海尔智家的模拟500平大平层,还原生活空间沉浸式体验。程传
Top