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

这篇文章主要给大家分享的是学习JavaScript一定要知道的3个小技巧,通常在 Angular 或 React 项目中,code review 时看到一些老式的 JavaScript 代码,就会将开发人员归类为初学者,下面我们就来一起看看初学者需要知道的三个小技巧,需要的朋友可以参考一下。编程资料免费白嫖点击

目录

一、神奇的扩展运算符

1.拷贝数组

2.合并数组

3.展开对象

二、进行空检查的最佳方法

1.可选链操作符

2.空值合并运算符

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


前言:

通常在 Angular 或 React 项目中,code review 时看到一些老式的 JavaScript 代码,就会将开发人员归类为初学者。但是,如果您知道以下 3 个技巧,您将被视为现代 JavaScript 的尤达大师。那么,让我们开始我们的旅程吧!

一、神奇的扩展运算符

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

1.拷贝数组

1

2

3

4

const arr = [1, 2, 3, 4]

const newArr = [...arr]

console.log(newArr)  // [1, 2, 3, 4]

2.合并数组

1

2

3

4

5

const numArr = [1, 2, 3, 4]

const alphaArr = ['a', 'b', 'c']

const newArr = [...numArr, ...alphaArr]

console.log(newArr) // [1, 2, 3, 4, 'a', 'b', 'c']

3.展开对象

1

2

3

4

const rectangle = { width: 10, height: 10 }

const cube = { ...rectangle, length: 7 }

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

2

3

4

5

6

7

8

9

10

11

const client = {

  name: 'Liu Xing',

  address: {

    zipcode: '1234'

  }

}

// 老的取值方式

if (client && client.address && client.address.zipcode) {}

// 更加现代的可选链操作符方式

if (client?.address?.zipcode) {}

2.空值合并运算符

空值合并操作符( ?? )是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。

1

2

3

const defaultMessage = 'Hello JavaScript 之禅'

const msg = defaultMessage ?? 'Hello Liu Xing';

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

const items = [

  {

    name: 'pineapple',

    price: 2,

    type: 'food'

  },

  {

    name: 'beef',

    price: 20,

    type: 'food'

  },

  {

    name: 'advocate',

    price: 1,

    type: 'food'

  },

  {

    name: 'shampoo',

    price: 5,

    type: 'other'

  }

]

let sum = 0

const itemsInYuan = []

for (let i = 0; i < items.length; i++) {

  const item = items[i]

  item.price *= 7.18

  itemsInYuan.push(item)

  if (item.type === 'food') {

    sum += item.price

  }

}

console.log(itemsInYuan)

/*

[

  { name: 'pineapple', price: 14.36, type: 'food' },

  { name: 'beef', price: 143.6, type: 'food' },

  { name: 'advocate', price: 7.18, type: 'food' },

  { name: 'shampoo', price: 35.9, type: 'other' }

]

*/

console.log(sum) // 165.14

现在我们来使用现在 JavaScript 提供的函数式编程方法来实现这个计算。

const itemsInYuan = items.map(item => {

  const itemInYuan = { ...item }

  itemInYuan.price *= 7.18

  return itemInYuan

})

const sum = itemsInYuan.filter(item => item.type === 'food').reduce((total, item) => total + item.price, 0)

上述示例使用 map 方法将欧元转为日元,使用 filter 过滤掉非食品的项目,使用 reduce 来计算价格总和。

到此这篇关于学习JavaScript一定要知道的3个小技巧的文章就介绍到这了,感谢关注,为你们准备了编程学习的一套资料,还有相应的代码,视频教程都可以获取,添加Q裙703046414即可获取。

​​​​​​​

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值