您的位置:首页 > 教程 > JavaScript > 总结分享10个超棒的JavaScript简写技巧

总结分享10个超棒的JavaScript简写技巧

2022-06-19 13:46:27 来源:易采站长站 作者:

总结分享10个超棒的JavaScript简写技巧

目录
1.合并数组2.合并数组(在开头位置)3.克隆数组4.解构赋值5.模板字面量6.For循环7.箭头函数8.在数组中查找对象9.将字符串转换为整数10.短路求值补充几点编码习惯

TDa站长之家-易采站长站-Easck.Com

1.合并数组

普通写法:TDa站长之家-易采站长站-Easck.Com

我们通常使用Array中的concat()方法合并两个数组。用concat()方法来合并两个或多个数组,不会更改现有的数组,而是返回一个新的数组。请TDa站长之家-易采站长站-Easck.Com

看一个简单的例子:TDa站长之家-易采站长站-Easck.Com

let Apples = ['????', '????'];
let fruits = ['????', '????', '????'].concat(apples);
console.log( fruits );
//=> ["????", "????", "????", "????", "????"]

简写写法:TDa站长之家-易采站长站-Easck.Com

我们可以通过使用ES6扩展运算符(...)来减少代码,如下所示:TDa站长之家-易采站长站-Easck.Com

let apples = ['????', '????'];
let fruits = ['????', '????', '????', ...apples];  // <-- here
console.log( fruits );
//=> ["????", "????", "????", "????", "????"]

TDa站长之家-易采站长站-Easck.Com

2.合并数组(在开头位置)

普通写法: 假设我们想将apples数组中的所有项添加到Fruits数组的开头,而不是像上一个示例中那样放在末尾。我们可以使用Array.prototype.unshift()来做到这一点:TDa站长之家-易采站长站-Easck.Com

let apples = ['????', '????'];
let fruits = ['????', '????', '????'];
// Add all items from apples onto fruits at start
Array.prototype.unshift.apply(fruits, apples)
console.log( fruits );
//=> ["????", "????", "????", "????", "????"]

简写写法:TDa站长之家-易采站长站-Easck.Com

我们依然可以使用ES6扩展运算符(...)缩短这段长代码,如下所示:TDa站长之家-易采站长站-Easck.Com

let apples = ['????', '????'];
let fruits = [...apples, '????', '????', '????'];  // <-- here
console.log( fruits );
//=> ["????", "????", "????", "????", "????"]

TDa站长之家-易采站长站-Easck.Com

3.克隆数组

普通写法:TDa站长之家-易采站长站-Easck.Com

我们可以使用Array中的slice()方法轻松克隆数组,如下所示:TDa站长之家-易采站长站-Easck.Com

let fruits = ['????', '????', '????', '????'];
let cloneFruits = fruits.slice();
console.log( cloneFruits );
//=> ["????", "????", "????", "????"]

简写写法:TDa站长之家-易采站长站-Easck.Com

我们可以使用ES6扩展运算符(...)像这样克隆一个数组:TDa站长之家-易采站长站-Easck.Com

let fruits = ['????', '????', '????', '????'];
let cloneFruits = [...fruits];  // <-- here
console.log( cloneFruits );
//=> ["????", "????", "????", "????"]

TDa站长之家-易采站长站-Easck.Com

4.解构赋值

普通写法:TDa站长之家-易采站长站-Easck.Com

在处理数组时,我们有时需要将数组“解包”成一堆变量,如下所示:TDa站长之家-易采站长站-Easck.Com

let apples = ['????', '????'];
let redApple = apples[0];
let greenApple = apples[1];
console.log( redApple );    //=> ????
console.log( greenApple );  //=> ????

简写写法:TDa站长之家-易采站长站-Easck.Com

我们可以通过解构赋值用一行代码实现相同的结果:TDa站长之家-易采站长站-Easck.Com

let apples = ['????', '????'];
let [redApple, greenApple] = apples;  // <-- here
console.log( redApple );    //=> ????
console.log( greenApple );  //=> ????

TDa站长之家-易采站长站-Easck.Com

5.模板字面量

普通写法:TDa站长之家-易采站长站-Easck.Com

通常,当我们必须向字符串添加表达式时,我们会这样做:TDa站长之家-易采站长站-Easck.Com

// Display name in between two strings
let name = 'Palash';
console.log('Hello, ' + name + '!');
//=> Hello, Palash!
// Add & Subtract two numbers
let num1 = 20;
let num2 = 10;
console.log('Sum = ' + (num1 + num2) + ' and Subtract = ' + (num1 - num2));
//=> Sum = 30 and Subtract = 10

简写写法:TDa站长之家-易采站长站-Easck.Com

通过模板字面量,我们可以使用反引号(``),这样我们就可以将表达式包装在${…}`中,然后嵌入到字符串,如下所示:TDa站长之家-易采站长站-Easck.Com

// Display name in between two strings
let name = 'Palash';
console.log(`Hello, ${name}!`);  // <-- No need to use + var + anymore
//=> Hello, Palash!
// Add two numbers
let num1 = 20;
let num2 = 10;
console.log(`Sum = ${num1 + num2} and Subtract = ${num1 - num2}`);
//=> Sum = 30 and Subtract = 10

TDa站长之家-易采站长站-Easck.Com

6.For循环

普通写法:TDa站长之家-易采站长站-Easck.Com

我们可以使用for循环像这样循环遍历一个数组:TDa站长之家-易采站长站-Easck.Com

let fruits = ['????', '????', '????', '????'];
// Loop through each fruit
for (let index = 0; index < fruits.length; index++) { 
  console.log( fruits[index] );  // <-- get the fruit at current index
}
//=> ????
//=> ????
//=> ????
//=> ????

简写写法:TDa站长之家-易采站长站-Easck.Com

我们可以使用for...of语句实现相同的结果,而代码要少得多,如下所示:TDa站长之家-易采站长站-Easck.Com

let fruits = ['????', '????', '????', '????'];
// Using for...of statement 
for (let fruit of fruits) {
  console.log( fruit );
}
//=> ????
//=> ????
//=> ????
//=> ????

TDa站长之家-易采站长站-Easck.Com

7.箭头函数

普通写法:TDa站长之家-易采站长站-Easck.Com

要遍历数组,我们还可以使用Array中的forEach()方法。但是需要写很多代码,虽然比最常见的for循环要少,但仍然比for...of语句多一点:TDa站长之家-易采站长站-Easck.Com

let fruits = ['????', '????', '????', '????'];
// Using forEach method
fruits.forEach(function(fruit){
  console.log( fruit );
});
//=> ????
//=> ????
//=> ????
//=> ????

简写写法:TDa站长之家-易采站长站-Easck.Com

但是使用箭头函数表达式,允许我们用一行编写完整的循环代码,如下所示:TDa站长之家-易采站长站-Easck.Com

let fruits = ['????', '????', '????', '????'];
fruits.forEach(fruit => console.log( fruit ));  // <-- Magic ✨
//=> ????
//=> ????
//=> ????
//=> ????

TDa站长之家-易采站长站-Easck.Com

8.在数组中查找对象

普通写法:TDa站长之家-易采站长站-Easck.Com

要通过其中一个属性从对象数组中查找对象的话,我们通常使用for循环:TDa站长之家-易采站长站-Easck.Com

let inventory = [
  {name: 'Bananas', quantity: 5},
  {name: 'Apples', quantity: 10},
  {name: 'Grapes', quantity: 2}
];
// Get the object with the name `Apples` inside the array
function getApples(arr, value) {
  for (let index = 0; index < arr.length; index++) {
    // Check the value of this object property `name` is same as 'Apples'
    if (arr[index].name === 'Apples') {  //=> ????

      // A match was found, return this object
      return arr[index];
    }
  }
}
let result = getApples(inventory);
console.log( result )
//=> { name: "Apples", quantity: 10 }

简写写法:TDa站长之家-易采站长站-Easck.Com

上面我们写了这么多代码来实现这个逻辑。但是使用Array中的find()方法和箭头函数=>,允许我们像这样一行搞定:TDa站长之家-易采站长站-Easck.Com

// Get the object with the name `Apples` inside the array
function getApples(arr, value) {
  return arr.find(obj => obj.name === 'Apples');  // <-- here
}
let result = getApples(inventory);
console.log( result )
//=> { name: "Apples", quantity: 10 }

TDa站长之家-易采站长站-Easck.Com

9.将字符串转换为整数

普通写法:TDa站长之家-易采站长站-Easck.Com

parseInt()函数用于解析字符串并返回整数:TDa站长之家-易采站长站-Easck.Com

let num = parseInt("10")
console.log( num )         //=> 10
console.log( typeof num )  //=> "number"

简写写法:TDa站长之家-易采站长站-Easck.Com

我们可以通过在字符串前添加+前缀来实现相同的结果,如下所示:TDa站长之家-易采站长站-Easck.Com

let num = +"10";
console.log( num )           //=> 10
console.log( typeof num )    //=> "number"
console.log( +"10" === 10 )  //=> true

TDa站长之家-易采站长站-Easck.Com

10.短路求值

普通写法:TDa站长之家-易采站长站-Easck.Com

如果我们必须根据另一个值来设置一个值不是falsy值,一般会使用if-else语句,就像这样:TDa站长之家-易采站长站-Easck.Com

function getUserRole(role) {
  let userRole;
  // If role is not falsy value
  // set `userRole` as passed `role` value
  if (role) {
    userRole = role;
  } else {
    // else set the `userRole` as USER
    userRole = 'USER';
  }
  return userRole;
}
console.log( getUserRole() )         //=> "USER"
console.log( getUserRole('ADMIN') )  //=> "ADMIN"

简写写法:TDa站长之家-易采站长站-Easck.Com

但是使用短路求值(||),我们可以用一行代码执行此操作,如下所示:TDa站长之家-易采站长站-Easck.Com

function getUserRole(role) {
  return role || 'USER';  // <-- here
}
console.log( getUserRole() )         //=> "USER"
console.log( getUserRole('ADMIN') )  //=> "ADMIN"

TDa站长之家-易采站长站-Easck.Com

补充几点

箭头函数:TDa站长之家-易采站长站-Easck.Com

如果你不需要this上下文,则在使用箭头函数时代码还可以更短:TDa站长之家-易采站长站-Easck.Com

let fruits = ['????', '????', '????', '????'];
fruits.forEach(console.log);

在数组中查找对象:TDa站长之家-易采站长站-Easck.Com

你可以使用对象解构和箭头函数使代码更精简:TDa站长之家-易采站长站-Easck.Com

// Get the object with the name `Apples` inside the array
const getApples = array => array.find(({ name }) => name === "Apples");
let result = getApples(inventory);
console.log(result);
//=> { name: "Apples", quantity: 10 }

短路求值替代方案:TDa站长之家-易采站长站-Easck.Com

const getUserRole1 = (role = "USER") => role;
const getUserRole2 = role => role ?? "USER";
const getUserRole3 = role => role ? role : "USER";

TDa站长之家-易采站长站-Easck.Com

编码习惯

最后我想说下编码习惯。代码规范比比皆是,但是很少有人严格遵守。究其原因,多是在代码规范制定之前,已经有自己的一套代码习惯,很难短时间改变自己的习惯。良好的编码习惯可以为后续的成长打好基础。下面,列举一下开发规范的几点好处,让大家明白代码规范的重要性:TDa站长之家-易采站长站-Easck.Com

    规范的代码可以促进团队合作。规范的代码可以减少>规范的代码可以降低维护成本。规范的代码有助于代码审查。养成代码规范的习惯,有助于程序员自身的成长。

    到此这篇关于总结分享10 个超棒的 JavaScript 简写技巧的文章就介绍到这了,更多相关JS简写技巧内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!TDa站长之家-易采站长站-Easck.Com

    如有侵权,请联系QQ:279390809 电话:15144810328

相关文章

  • vue跳转页面的几种方法(推荐)

    vue跳转页面的几种方法(推荐)

    vue跳转不同页面的多种方法 1:router-link跳转 !-- 直接跳转 --router-link to='/testDemo' button点击跳转2/button/router-link !-- 带参数跳转 --router-link :to="{path:'testDemo',query:{setid:123456}}" button点击跳转
    2020-03-26
  • Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除

    Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除

    最近有使用vue+elementUI实现多图片上传的需求,遂做此纪录。 本次主要写一下前端的实现细节,至于后台以Multipart[ ]数组接收即可,不再赘述,网上一搜大把文章可供参考。 本次使用
    2020-03-23
  • 微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能

    微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能

    上效果图: 一:搜索框功能实现 1.在首页做一个搜索框的样式并实现跳转到搜索页面 view class='page_row' bindtap="suo" view class="search" view class="df search_arr" icon class="searchcion" size='20' type='search'/
    2020-03-10
  • 微信小程序实现canvas分享朋友圈海报

    微信小程序实现canvas分享朋友圈海报

    本文实例为大家分享了微信小程序分享朋友圈海报的具体代码,供大家参考,具体内容如下 思路:生成朋友圈海报放在公共文件,首先需要绘制canvas,点击分享朋友圈按钮,在手机屏幕
    2020-06-21
  • 详解ES6 Modules

    详解ES6 Modules

    当下, 我们几乎所有的项目都是基于 webpack、rollup 等构建工具进行开发的,模块化已经是常态。 我们对它并不陌生,今天,我们就再系统的回顾一下ES6的模块机制, 并总结下常用的操
    2020-07-04
  • Vue-router 报错NavigationDuplicated的解决方法

    Vue-router 报错NavigationDuplicated的解决方法

    版本:3.1.x 报错原因: 使用push()、replace()进行导航时,不能重复导航到当前路由。 解决办法: 方法1:在定义路由的文件中router/index.js const originalPush = VueRouter.prototype.pushVueRouter.protot
    2020-03-31
  • vue使用better-scroll实现滑动以及左右联动

    vue使用better-scroll实现滑动以及左右联动

    本文实例为大家分享了vue实现滑动以及左右联动效果的具体代码,供大家参考,具体内容如下 一、首先需要在项目中引入better-scroll 1. 在package.json 直接写入 "better-scroll":"^1.15.1" 版本以
    2020-06-30
  • Vue如何提升首屏加载速度实例解析

    Vue如何提升首屏加载速度实例解析

    在Vue项目中,引入到工程中的所有js、css文件,编译时都会被打包进vendor.js,浏览器在加载该文件之后才能开始显示首屏。若是引入的库众多,那么vendor.js文件体积将会相当的大,影响
    2020-06-25