前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >10 个超有用的 JavaScript 技巧

10 个超有用的 JavaScript 技巧

作者头像
疯狂的技术宅
发布2020-06-06 16:27:15
7780
发布2020-06-06 16:27:15
举报
文章被收录于专栏:京程一灯京程一灯

众所周知,JavaScript 一直在迅速变化。新的 ES2020 引入了许多很棒的功能。你可以通过很多不同的方式去编写代码。他们会达到相同的目标,但其中一些会更短、更清晰。你可以凭借一些小技巧来使代码更清晰。这里列出的 JavaScript 开发技巧一定会对你有所帮助。

方法参数的验证

JavaScript 允许你设置参数的默认值。通过这种方法,可以通过一个巧妙的技巧来验证你的方法参数。

代码语言:javascript
复制
1const isRequired = () => { throw new Error('param is required'); };
2const print = (num = isRequired()) => { console.log(`printing ${num}`) };
3print(2);//printing 2
4print()// error
5print(null)//printing null

非常整洁,不是吗?


格式化 json 代码

你可能对 JSON.stringify 非常熟悉。但是你是否知道可以用 stringify 进行格式化输出?实际上这很简单。

stringify 方法需要三个输入。value,replacer 和 space。后两个是可选参数。这就是为什么我们以前没有注意过它们。要对 json 进行缩进,必须使用 space 参数。

代码语言:javascript
复制
1console.log(JSON.stringify({name:"John",Age:23},null,'\t'));
2>>> 
3{
4 "name": "John",
5 "Age": 23
6}

从数组中获取唯一值

要从数组中获取唯一值,我们需要使用 filter 方法来过滤出重复值。但是有了新的 Set 对象,事情就变得非常顺利和容易了。

代码语言:javascript
复制
1let uniqueArray = [...new Set([1, 2, 3, 3, 3, "school", "school", 'ball', false, false, true, true])];
2>>> [1, 2, 3, "school", "ball", false, true]

从数组中删除虚值(Falsy Value)

在某些情况下,你可能想从数组中删除虚值。虚值是 JavaScript 的 Boolean 上下文中被认定为为 false 的值。JavaScript 中只有六个虚值,它们是:

  • undefined
  • null
  • NaN
  • 0
  • "" (空字符串)
  • false

滤除这些虚值的最简单方法是使用以下函数。

代码语言:javascript
复制
1myArray.filter(Boolean);

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

代码语言:javascript
复制
1myArray
2    .map(item => {
3        // Do your changes and return the new item
4    })
5    .filter(Boolean);

合并多个对象

假设我有几个需要合并的对象,那么这是我的首选方法。

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

这三个点在 JavaScript 中也称为展开运算符。


对数字数组进行排序

JavaScript 数组有内置的 sort 方法。默认情况下 sort 方法把数组元素转换为字符串,并对其进行字典排序。在对数字数组进行排序时,这有可能会导致一些问题。所以下面是解决这类问题的简单解决方案。

代码语言:javascript
复制
1[0,10,4,9,123,54,1].sort((a,b) => a-b);
2>>> [0, 1, 4, 9, 10, 54, 123]

这里提供了一个将数字数组中的两个元素与 sort 方法进行比较的函数。这个函数可帮助我们接收正确的输出。


禁用右键

你可能想要阻止用户在你的网页上单击鼠标右键。

代码语言:javascript
复制
1<body oncontextmenu="return false">
2    <div></div>
3</body>
4

这段简单的代码将为你的用户禁用右键单击。


使用别名进行解构

解构赋值语法是一种 JavaScript 表达式,可以将数组中的值或对象的值或属性分配给变量。解构赋值能让我们用更简短的语法进行多个变量的赋值。

代码语言:javascript
复制
1const object = { number: 10 };
2
3// Grabbing number
4const { number } = object;
5
6// Grabbing number and renaming it as otherNumber
7const { number: otherNumber } = object;
8console.log(otherNumber); //10

获取数组中的最后一项

可以通过对 splice 方法的参数传入负整数,来数获取组末尾的元素。

代码语言:javascript
复制
1let array = [0, 1, 2, 3, 4, 5, 6, 7] 
2console.log(array.slice(-1));
3>>>[7]
4console.log(array.slice(-2));
5>>>[6, 7]
6console.log(array.slice(-3));
7>>>[5, 6, 7]

等待 Promise 完成

在某些情况下,你可能会需要等待多个 promise 结束。可以用 Promise.all 来并行运行我们的 promise。

代码语言:javascript
复制
1const PromiseArray = [
2    Promise.resolve(100),
3    Promise.reject(null),
4    Promise.resolve("Data release"),
5    Promise.reject(new Error('Something went wrong'))];
6
7Promise.all(PromiseArray)
8  .then(data => console.log('all resolved! here are the resolve values:', data))
9  .catch(err => console.log('got rejected! reason:', err))

关于 Promise.all 的主要注意事项是,当一个 Promise 拒绝时,该方法将引发错误。这意味着你的代码不会等到你所有的 promise 都完成。

如果你想等到所有 promise 都完成后,无论它们被拒绝还是被解决,都可以使用 Promise.allSettled。此方法在 ES2020 的最终版本得到支持。

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

即使某些 promise 被拒绝,Promise.allSettled 也会从你所有的 promise 中返回结果。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端先锋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法参数的验证
  • 格式化 json 代码
  • 从数组中获取唯一值
  • 从数组中删除虚值(Falsy Value)
  • 合并多个对象
  • 对数字数组进行排序
  • 禁用右键
  • 使用别名进行解构
  • 获取数组中的最后一项
  • 等待 Promise 完成
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档