很多JavaScript开发人员都忽略了的十大超实用技巧

开发 前端
众所周知,JavaScript更新换代的速度特别快,总能给人新鲜感,也一直有能让我们挖掘探索的东西,新版ES2020就有许多特别厉害的功能让人迫不及待想试试。

 本文转载自公众号“读芯术”(ID:AI_Discovery)

众所周知,JavaScript更新换代的速度特别快,总能给人新鲜感,也一直有能让我们挖掘探索的东西,新版ES2020就有许多特别厉害的功能让人迫不及待想试试。

[[331845]]

写代码的方法有很多,总有一些方法写出来的代码要更加简洁清楚,这就需要一些小技巧了。本文就列出了一些对JavaScript开发人员有用的技巧,希望会对你有所帮助。

方法参数校验

JavaScript可以设置参数的默认值,这提供了一个验证方法参数的小窍门:

 

  1. const isRequired = () => { thrownew Error('param is required'); }; 
  2. const print = (num =isRequired()) => { console.log(`printing ${num}`) }; 
  3. print(2);//printing 2 
  4. print()// error 
  5. print(null)//printing null 

格式化JSON编码

你肯定对JSON.stringify 已经很熟悉了,但你会用 stringify 将输出格式化吗?这个操作实际非常简单。stringify 需要三个参数,value , replacer 和space,后两个是可选参数,所以之前没有用到过它,如果要缩进JSON就必须设置space参数。

 

  1. console.log(JSON.stringify({name:"John",Age:23},null,'\t'));>>> 
  2.  "name""John"
  3.  "Age": 23 
很多JavaScript开发人员都忽略了的十大超实用技巧

从数组中获取唯一值

从数组中获取唯一值要使用filter过滤出重复值,但有了新的set原生对象就变得顺手多了。

 

  1. let uniqueArray = [...newSet([1, 2, 3, 3,3,"school","school",'ball',false,false,true,true])]; 
  2. >>> [1, 2, 3,"school""ball"falsetrue

筛选数字数组

JavaScript数组带有内置的筛选方法。默认情况下,该方法将数组元素转换为字符串,并对其进行字典排序。在对数字数组进行排序时可能会出现问题,这儿有一个简单的解决方案:

 

  1. [0,10,4,9,123,54,1].sort((a,b)=> a-b);>>> [0, 1, 4, 9, 10, 54, 123] 

这个函数通过比较数字数组中的两个元素实现筛选,可以得到正确的输出。

删除数组中的虚假值

有时我们可能需要删掉数组中的虚假值,即那些在JavaScript中等同于FALSE的值,JavaScript有六种虚假值,包括:

  1. undefined
  2. null
  3. NaN
  4. 0
  5.  “” (空字符串)
  6. false

过滤出虚假值比较简单的方法是使用下面的函数:

 

  1. myArray 
  2.     .filter(Boolean); 

如果要对数组进行一些修改,然后过滤新数组,可以尝试如下操作。记住,原始myArray保持不变。

 

  1. myArray 
  2.     .map(item => { 
  3.         // Do your changes and return thenew item 
  4.     }) 
  5.     .filter(Boolean); 

合并多个对象

碰到要合并两类或多类的情况时,下面的方法非常好用:

 

  1. const user = { 
  2. name'John Ludwig'
  3. gender: 'Male' 
  4. };const college = { 
  5. primary'Mani Primary School'
  6. secondary: 'Lass Secondary School' 
  7. };const skills = { 
  8. programming: 'Extreme'
  9. swimming: 'Average'
  10. sleeping: 'Pro' 
  11. };const summary = {...user, ...college,...skills}; 

等所有promise完成后再行动

有时你需要等一些promise对象完成后才能进行下一步操作,我们可以使用Promise.all 来同步完成。注意,所有Promise可以在单核CPU中同时运行,在多核CPU中并行运行。它的主要任务是等待传递给它的所有promise对象全部得到解析。

 

  1. const PromiseArray = [ 
  2.     Promise.resolve(100), 
  3.     Promise.reject(null), 
  4.     Promise.resolve("Datarelease"), 
  5.     Promise.reject(new Error('Somethingwent wrong'))];Promise.all(PromiseArray) 
  6.   .then(data => console.log('allresolved! here are the resolve values:', data)) 
  7.   .catch(err => console.log('gotrejected! reason:', err)) 

Promise.all必须注意的要点是,如果其中一个promise被拒,就会发出错误警告。这意味着你的代码不用等所有promise对象全部解析完毕。

如果不管promise是否被拒都想让它全部运行完,可以用Promise.allSettled,在ES2020的最终版本中使用这个方法:

 

  1. const PromiseArray = [ 
  2.     Promise.resolve(100), 
  3.     Promise.reject(null), 
  4.     Promise.resolve("Datarelease"), 
  5.     Promise.reject(new Error('Somethingwent wrong'))];Promise.allSettled(PromiseArray).then(res =>{ 
  6. console.log(res); 
  7. }).catch(err => console.log(err));//[ 
  8. //{status: "fulfilled", value: 100}, 
  9. //{status: "rejected", reason: null}, 
  10. //{status: "fulfilled", value: "Data release"}, 
  11. //{status: "rejected", reason: Error: Something went wrong ...} 
  12. //] 

尽管有些promise被拒,Promise.allSettled 会返回所有promise的结果。

禁用右键

尽管不多见,但有时你可能需要阻止用户在网页上使用鼠标右键,这个简单的代码就能做到:

  1. <body oncontextmenu="returnfalse"
  2.     <div></div> 
  3. </body> 

利用别名节点解构

解构赋值是JavaScript的一种表达式,可以将数组中的值或对象属性解压为不同的变量,且不必坚持使用现有的对象变量,而可以按照个人喜好对其重新命名:

 

  1. const object = { number: 10 };//Grabbing number 
  2. const { number } = object;// Grabbing number and renaming it as otherNumber 
  3. const { number: otherNumber } = object;console.log(otherNumber); //10 

获取数组中的最后几项

如果要提取数组最后几项,可以使用slice方法,参数设置为负参数:

 

  1. let array = [0, 1, 2, 3, 4, 5,6, 7] 
  2. console.log(array.slice(-1)); 
  3. >>>[7] 
  4. console.log(array.slice(-2)); 
  5. >>>[6, 7] 
  6. console.log(array.slice(-3)); 
  7. >>>[5, 6, 7] 

这些可能会被忽视的小技巧可能会给你帮大忙,赶快学起来吧!

 

责任编辑:华轩 来源: 读芯术
相关推荐

2020-06-28 09:56:48

.NET开发工具

2018-05-08 12:00:33

开发代码Swift

2011-03-31 10:22:41

Java开发

2009-04-03 14:36:05

Java问卷调查开源

2016-10-18 10:45:00

开发开源

2020-06-05 14:38:25

开发人员职位开发

2016-10-14 19:30:21

云计算云数据库数据库

2015-07-09 10:18:36

Android开发工具

2016-11-09 13:46:00

云数据库

2021-11-21 22:43:10

Java开发框架

2019-07-02 14:27:31

编程语言开发

2015-03-03 09:35:46

移动开发APP趋势

2017-10-24 11:59:41

JavaScript

2015-03-03 14:58:56

移动开发APP趋势

2010-05-17 09:50:24

PHP

2022-01-21 10:18:53

VSCode扩展插件

2012-07-13 09:18:29

2020-04-20 18:15:46

开发自信技术

2023-02-26 01:47:13

2021-02-16 16:44:40

RustJavaScript开发
点赞
收藏

51CTO技术栈公众号