十个你应该学会使用的现代JavaScript技巧

开发 前端
JavaScript 有很多很酷的特性,但大多数初学者和中级开发人员都不知道。 今天,我挑选了 10 个我在日常 JavaScript 项目中使用的技巧。

 [[427748]]

1、有条件地向对象添加属性

我们可以使用扩展运算符 ... 来有条件地向 JavaScript 对象快速添加属性。 

  1. const condition = true
  2. const person = { 
  3.   id: 1, 
  4.   name'John Doe'
  5.   ...(condition && { age: 16 }), 
  6. }; 

如果每个操作数的计算结果都为真, && 运算符将返回最后计算的表达式。因此返回一个对象 { age: 16 },然后,将其扩展为 person 对象的一部分。

如果condition为 false,则 JavaScript 将执行以下操作: 

  1. const person = { 
  2.   id: 1, 
  3.   name'John Doe'
  4.   ...(false), // evaluates to false 
  5. }; 
  6. // spreading false has no effect on the object 
  7. console.log(person); // { id: 1, name'John Doe' } 

2、检查一个属性是否存在于一个对象中

你知道我们可以使用 in 关键字来检查 JavaScript 对象中是否存在属性吗? 

  1. const person = { name'John Doe', salary: 1000 }; 
  2. console.log('salary' in person); // returns true 
  3. console.log('age' in person); // returns false 

3、对象中的动态属性名称

使用动态键设置对象属性很简单。只需使用 ['key_name'] 符号添加属性: 

  1. const dynamic = 'flavour'
  2. var item = { 
  3.   name'Biscuit'
  4.   [dynamic]: 'Chocolate' 
  5. console.log(item); // { name'Biscuit', flavour: 'Chocolate' } 

同样的技巧也可用于使用动态键引用对象属性: 

  1. const keyName = 'name'
  2. console.log(item[keyName]); // returns 'Biscuit' 

4、使用动态键进行对象解构

你知道可以解构一个变量并立即用 : 符号重命名它。但是,当你不知道键名或键名是动态的时,你也可以解构对象的属性吗?

首先,让我们看看如何在解构(使用别名解构)时重命名变量。 

  1. const person = { id: 1, name'John Doe' }; 
  2. const { name: personName } = person; 
  3. console.log(personName); // returns 'John Doe' 

现在,让我们使用动态键来解构属性: 

  1. const templates = { 
  2.   'hello''Hello there'
  3.   'bye''Good bye' 
  4. }; 
  5. const templateName = 'bye'
  6. const { [templateName]: template } = templates; 
  7. console.log(template) // returns 'Good bye' 

5、空合并,?? 运算符

当你要检查变量是 null 还是 undefined 时,此?运算符很有用。当左侧为null或者undefined时,它返回右侧值,否则返回其左侧操作数。 

  1. const foo = null ?? 'Hello'
  2. console.log(foo); // returns 'Hello' 
  3. const bar = 'Not null' ?? 'Hello'
  4. console.log(bar); // returns 'Not null' 
  5. const baz = 0 ?? 'Hello'
  6. console.log(baz); // returns 0 

在第三个示例中,返回 0 是因为即使 0 在 JavaScript 中被认为是假的,它不是 null ,也不是undefined。你可能认为我们可以使用 || 运算符在这里,但这两者之间存在差异: 

  1. const cannotBeZero = 0 || 5; 
  2. console.log(cannotBeZero); // returns 5 
  3. const canBeZero = 0 ?? 5; 
  4. console.log(canBeZero); // returns 0 

6、可选链接 (?.)

你是否也讨厌像TypeError:无法读取 null 的属性“foo”之类的错误。这对每个 JavaSript 开发人员来说都是头疼的问题。引入了可选链就是为了解决这个问题。让我们来看看: 

  1. const book = { id:1, title: 'Title', author: null }; 
  2. // normally, you would do this 
  3. console.log(book.author.age) // throws error 
  4. console.log(book.author && book.author.age); // returns null (no error) 
  5. // with optional chaining 
  6. console.log(book.author?.age); // returns undefined 
  7. // or deep optional chaining 
  8. console.log(book.author?.address?.city); // returns undefined 

你还可以使用具有以下功能的可选链接: 

  1. const person = { 
  2.   firstName: 'Haseeb'
  3.   lastName: 'Anwar'
  4.   printName: function () { 
  5.     return `${this.firstName} ${this.lastName}`; 
  6.   }, 
  7. }; 
  8. console.log(person.printName()); // returns 'Haseeb Anwar' 
  9. console.log(persone.doesNotExist?.()); // returns undefined 

7、使用 !! 运算符进行布尔转换

该 !! 运算符可用于将表达式的结果快速转换为布尔值 true 或 false。就是这样: 

  1. const greeting = 'Hello there!'
  2. console.log(!!greeting) // returns true 
  3. const noGreeting = ''
  4. console.log(!!noGreeting); // returns false 

8、字符串和整数转换

使用 + 运算符快速将字符串转换为数字,如下所示: 

  1. const stringNumer = '123'
  2. console.log(+stringNumer); // returns integer 123 
  3. console.log(typeof +stringNumer); // returns 'number' 

要将数字快速转换为字符串,请使用 + 运算符后跟空字符串 "": 

  1. const myString = 25 + ''
  2. console.log(myString); // returns '25' 
  3. console.log(typeof myString); // returns 'string' 

这些类型转换非常方便,但它们的清晰度和代码可读性较差。因此,在生产中使用它们之前,你可能需要考虑一下。但是,不要犹豫在代码中使用它们。

9、检查数组中的假值

你必须熟悉 filter、some 和 every 数组方法。但是,你也应该知道你可以只使用Boolean方法来测试真值: 

  1. const myArray = [nullfalse'Hello', undefined, 0]; 
  2. // filter falsy values 
  3. const filtered = myArray.filter(Boolean); 
  4. console.log(filtered); // returns ['Hello'
  5. // check if at least one value is truthy 
  6. const anyTruthy = myArray.some(Boolean); 
  7. console.log(anyTruthy); // returns true 
  8. // check if all values are truthy 
  9. const allTruthy = myArray.every(Boolean); 
  10. console.log(allTruthy); // returns false 

这是它的工作原理。正如我们所知,这些数组方法采用回调函数,因此我们将 Boolean方法作为回调函数传递。Boolean本身接受一个参数并根据参数的真实性返回 true 或 false。所以我们可以这样说: 

  1. myArray.filter(val => Boolean(val)); 

是不是和这个一样: 

  1. myArray.filter(Boolean); 

10、扁平化数组

原型 Array 上有一个方法 flat 可以让你从数组的数组中创建一个数组: 

  1. const myArray = [{ id: 1 }, [{ id: 2 }], [{ id: 3 }]]; 
  2. const flattedArray = myArray.flat();  
  3. // returns [ { id: 1 }, { id: 2 }, { id: 3 } ] 

你还可以定义一个深度级别,指定嵌套数组结构应展平的深度。例如: 

  1. const arr = [0, 1, 2, [[[3, 4]]]]; 
  2. console.log(arr.flat(2)); // returns [0, 1, 2, [3,4]] 

 【编辑推荐】

 

责任编辑:华轩 来源: 今日头条
相关推荐

2023-12-27 14:12:40

JavaScrip技巧

2023-01-27 15:22:11

JavaScript开发编程语言

2023-10-16 07:55:15

JavaScript对象技巧

2023-05-16 15:32:45

JavaScriptWeb前端工程师

2024-04-24 14:52:26

JavaScriptWeb 开发

2024-03-04 16:32:02

JavaScript运算符

2015-08-24 09:12:00

Redis 技巧

2010-09-08 14:35:22

CSS

2021-03-05 11:49:03

React代码运算符

2022-05-12 08:12:51

PythonPip技巧

2022-05-06 13:19:13

JS前端

2022-12-28 09:02:50

WebStorm主题字段

2023-02-09 16:15:27

JavaScript编程语言字符串

2023-04-17 16:19:32

编程语言JavaScript开发

2023-07-24 07:11:43

2024-08-21 08:37:47

CodeEmmet悬浮框

2014-03-04 09:35:45

JavaScript调试

2023-09-06 07:22:48

控制台UI工具

2022-08-28 19:03:18

JavaScript编程语言开发

2022-06-08 10:42:34

ReduceJavaScript技巧
点赞
收藏

51CTO技术栈公众号