耀极客论坛

 找回密码
 立即注册
查看: 676|回复: 0

学习JavaScript一定要知道的3个小技巧

[复制链接]

336

主题

318

帖子

22万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
220553
发表于 2022-5-9 00:22:50 | 显示全部楼层 |阅读模式
  这篇文章主要给大家分享的是学习JavaScript一定要知道的3个小技巧,通常在 Angular 或 React 项目中,code review 时看到一些老式的 JavaScript 代码,就会将开发人员归类为初学者,下面我们就来一起看看初学者需要知道的三个小技巧,需要的朋友可以参考一下
  前言:
  通常在 Angular 或 React 项目中,code review 时看到一些老式的 JavaScript 代码,就会将开发人员归类为初学者。但是,如果您知道以下 3 个技巧,您将被视为现代 JavaScript 的尤达大师。那么,让我们开始我们的旅程吧!

一、神奇的扩展运算符

  扩展运算符(spread)是三个点( ... ), 可以说我在 JavaScript 中最喜欢的运算符了。我主要在以下 3 种情况下使用:

1.拷贝数组
  1. const arr = [1, 2, 3, 4]
  2. const newArr = [...arr]
  3. console.log(newArr)  // [1, 2, 3, 4]
复制代码
2.合并数组
  1. const numArr = [1, 2, 3, 4]
  2. const alphaArr = ['a', 'b', 'c']
  3. const newArr = [...numArr, ...alphaArr]
  4. console.log(newArr) // [1, 2, 3, 4, 'a', 'b', 'c']
复制代码
3.展开对象
  1. const rectangle = { width: 10, height: 10 }
  2. const cube = { ...rectangle, length: 7 }
  3. console.log(cube) // {width: 10, height: 10, length: 7}
复制代码
二、进行空检查的最佳方法

  你还记得你写的第一个空检查代码吗?当 JavaScript 还没有现在这个完善时,我曾在我的旧代码中这样写:
  1. if (foo !== null && foo !== undefined) { }
复制代码
  后来,我的生命被简单的 if 拯救!
  1. if (foo) {}
复制代码
  只要条件值 foo 不是下列值,都将为真值“
       
  • null   
  • undefined   
  • NaN   
  • 空字符串 ("")   
  • false
  除了简单的 if 之外,现代 JavaScript 的可选链操作符 ?. 与空值合并运算符 ?? 可以使我们的代码更加简洁

1.可选链操作符

  可选链操作符是访问嵌套对象属性的安全方式。这意味着在访问一长串对象属性时,我们不必进行多次空检查。当尝试访问可能不存在的对象属性时,可选链操作符将会使表达式更短、更简明
  以下示例检查客户地址的邮政编码是否为 null :
  1. const client = {
  2.   name: 'Liu Xing',
  3.   address: {
  4.     zipcode: '1234'
  5.   }
  6. }
  7. // 老的取值方式
  8. if (client && client.address && client.address.zipcode) {}
  9. // 更加现代的可选链操作符方式
  10. if (client?.address?.zipcode) {}
复制代码
2.空值合并运算符

  空值合并操作符( ?? )是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。
  1. const defaultMessage = 'Hello JavaScript 之禅'
  2. const msg = defaultMessage ?? 'Hello Liu Xing';
  3. console.log(msg); // Hello JavaScript 之禅'
复制代码
  如果 defaultMessage 是 null 或者 undefined 则将打印出 Hello Liu Xing
  当我们按顺序使用它时,它会变得更强大:
  1. console.log(firstName ?? lastName ?? 'anonymous')
复制代码
  在这个例子中,如果 firstName 不是 null/undefined,它将显示 firstName, 否则,如果 lastName 不是 null/undefined,它将显示 lastName。 最后,如果它们都为 null/undefined,它将显示“anonymous”。

三、使用 .map()、.reduce() 和 .filter()

  接下来,谈论函数式和反应式编程的强大技术!几年前我第一次使用它时,它真的为我打开了一扇新的大门。 现在每次看到这些简洁的代码,我仍然被它的美丽所震撼。
  今天我举例介绍三个最常用的方法:map、reduce 和 filter。
  在新冠疫情 之前,我们去巴黎度假。于是他们去超市买了些东西。他们买了食物和日用品。但是所有的物品都是欧元,他们想知道每件物品的价格以及他们食物的人民币总成本。
  鉴于 1 欧元等于 7.18 日元。
  以传统方式,我们将使用经典循环来完成:
  1. const items = [
  2.   {
  3.     name: 'pineapple',
  4.     price: 2,
  5.     type: 'food'
  6.   },
  7.   {
  8.     name: 'beef',
  9.     price: 20,
  10.     type: 'food'
  11.   },
  12.   {
  13.     name: 'advocate',
  14.     price: 1,
  15.     type: 'food'
  16.   },
  17.   {
  18.     name: 'shampoo',
  19.     price: 5,
  20.     type: 'other'
  21.   }
  22. ]
  23. let sum = 0
  24. const itemsInYuan = []
  25. for (let i = 0; i ‹ items.length; i++) {
  26.   const item = items[i]
  27.   item.price *= 7.18
  28.   itemsInYuan.push(item)
  29.   if (item.type === 'food') {
  30.     sum += item.price
  31.   }
  32. }
  33. console.log(itemsInYuan)
  34. /*
  35. [
  36.   { name: 'pineapple', price: 14.36, type: 'food' },
  37.   { name: 'beef', price: 143.6, type: 'food' },
  38.   { name: 'advocate', price: 7.18, type: 'food' },
  39.   { name: 'shampoo', price: 35.9, type: 'other' }
  40. ]
  41. */
  42. console.log(sum) // 165.14
  43. 现在我们来使用现在 JavaScript 提供的函数式编程方法来实现这个计算。
  44. const itemsInYuan = items.map(item => {
  45.   const itemInYuan = { ...item }
  46.   itemInYuan.price *= 7.18
  47.   return itemInYuan
  48. })
  49. const sum = itemsInYuan.filter(item => item.type === 'food').reduce((total, item) => total + item.price, 0)
复制代码
  上述示例使用 map 方法将欧元转为日元,使用 filter 过滤掉非食品的项目,使用 reduce 来计算价格总和。
  到此这篇关于学习JavaScript一定要知道的3个小技巧的文章就介绍到这了,更多相关JavaScript小技巧内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|耀极客论坛 ( 粤ICP备2022052845号-2 )|网站地图

GMT+8, 2022-11-28 19:29 , Processed in 0.081345 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表