你可能从未使用过的11+个JavaScript特性(小结)

下面是详细讲解“你可能从未使用过的11+个JavaScript特性(小结)”的攻略。

介绍

本文将讲解11+个在JavaScript中常被忽略的特性。包括可选链操作符、空合并运算符、BigInt、Promise.allSettled()、Array.flat()、Array.flatMap()、Object.fromEntries()、String.trimStart()和trimEnd()、相等运算符(==和!=)、严格相等运算符(===和!==)、null赋值运算符(??)。

可选链操作符

可选链操作符(?.)是一个新的操作符,可以帮助我们避免在链式调用中因为某个属性或方法不存在而导致的TypeError问题。示例代码如下:

const person = {
  name: 'John',
  pet: {
    type: 'dog',
    name: 'Rufus'
  }
};

console.log(person.pet?.name); // "Rufus"
console.log(person.pet?.age); // undefined
console.log(person.pet.age); // throws TypeError

空合并运算符

空合并运算符(??)可以帮助我们在对nullish(null或undefined)值进行取值操作时简化代码。示例代码如下:

const a = null;
const b = undefined;
const c = 'Hello';

console.log(a ?? b); // undefined
console.log(a ?? c); // "Hello"
console.log(b ?? c); // "Hello"

BigInt

BigInt可以帮助我们处理大整数(超过2的53次方-1,也就是JavaScript的Number类型的最大值)。示例代码如下:

const bigInt1 = BigInt(Number.MAX_SAFE_INTEGER) + 1n;
const bigInt2 = 9007199254740993n;
console.log(bigInt1); // 9007199254740993n
console.log(bigInt2); // 9007199254740993n
console.log(bigInt1 === bigInt2); // true

Promise.allSettled()

Promise.allSettled()可以帮助我们同时处理多个Promise,并且不会因为其中某个Promise失败而导致整个操作失败。示例代码如下:

const promises = [
  Promise.resolve(1),
  Promise.reject('error'),
  Promise.resolve(3)
];

Promise.allSettled(promises)
  .then(results => console.log(results))
  .catch(error => console.log(error));

// 输出:
// [
//   {status: "fulfilled", value: 1},
//   {status: "rejected", reason: "error"},
//   {status: "fulfilled", value: 3}
// ]

Array.flat()

Array.flat()可以帮助我们将多维数组转化为一维数组。示例代码如下:

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

Array.flatMap()

Array.flatMap()可以帮助我们在映射数组的同时展开其结果。示例代码如下:

const arr = ['1 2', '3 4', '5 6'];
const newArray = arr.flatMap(str => str.split(' ').map(Number));
console.log(newArray); // [1, 2, 3, 4, 5, 6]

Object.fromEntries()

Object.fromEntries()可以将由键值对组成的二维数组转化为对象。示例代码如下:

const entries = [['a', 1], ['b', 2], ['c', 3]];
console.log(Object.fromEntries(entries)); // {a: 1, b: 2, c: 3}

String.trimStart()和trimEnd()

String.trimStart()和trimEnd()可以帮助我们去除字符串开头和结尾的空格。示例代码如下:

const str = '   hello world   ';
console.log(str.trimStart()); // "hello world   "
console.log(str.trimEnd()); // "   hello world"

相等和严格相等运算符

相等运算符(==和!=)和严格相等运算符(===和!==)可以帮助我们判断两个值是否相同。其中,严格相等运算符在比较时会同时比较变量的值和类型。示例代码如下:

const num1 = 1;
const num2 = '1';

console.log(num1 == num2); // true
console.log(num1 === num2); // false

null赋值运算符

null赋值运算符(??)可以帮助我们对变量进行nullish判断,并在变量不存在或者为nullish时进行默认值的赋值操作。示例代码如下:

const a = null;
const b = undefined;
const c = 'Hello';

console.log(a ?? 'default'); // 'default'
console.log(b ?? 'default'); // 'default'
console.log(c ?? 'default'); // 'Hello'

结论

在JavaScript开发中,有很多看起来不起眼的特性其实可以极大地提高代码的质量和效率。希望你能够通过本文学到一些新的技巧。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:你可能从未使用过的11+个JavaScript特性(小结) - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java 读取类路径下的资源文件实现代码

    下面是实现Java读取类路径下资源文件的完整攻略,包括两条示例说明。 1. 获取类路径 要读取类路径下的资源文件,我们首先需要获取类路径。利用Java的类加载器可以获取到类路径,具体步骤如下: // 获取类加载器 ClassLoader classLoader = Thread.currentThread().getContextClassLoader();…

    Java 2023年5月31日
    00
  • day01-项目介绍与环境搭建

    项目介绍与环境搭建 1.项目学习前置知识 Java基础知识 javaweb MySQL SpringBoot SSM(Spring,SpringMVC,MyBatis) Maven 2.学习收获 了解企业项目开发的完整流程,增长开发经验 了解需求分析的过程,提高分析和设计能力 对所学的技术进行灵活应用,提高编码能力 解决各种异常情况,提高代码调试能力 3.软…

    Java 2023年4月17日
    00
  • Java LocalDateTime常用操作方法

    Java LocalDateTime常用操作方法 Java LocalDateTime是一个不可变的类,代表日期和时间,使用方法和Date和Calendar有所不同。下面是Java LocalDateTime常用操作方法的完整攻略。 创建LocalDateTime LocalDateTime的创建方法有以下几种方式: 1. 使用now()方法创建 使用now…

    Java 2023年5月20日
    00
  • 聊聊maven与jdk版本对应关系

    聊聊maven与jdk版本对应关系 Maven是Java项目在构建编译过程中的重要工具,Java开发者需要根据项目需求选择合适的版本。同时,Maven的版本也需要与Java版本对应,否则可能会导致编译、构建、打包等问题。因此,本文将介绍Maven与JDK版本对应关系的攻略,以帮助Java开发者正确选择版本。 Maven与JDK版本对应关系 以下是Maven与…

    Java 2023年5月20日
    00
  • 简单了解Java程序运行整体流程

    下面我将为你详细讲解“简单了解Java程序运行整体流程”的完整攻略。 1. Java程序运行流程 Java程序的运行可以分为三个主要步骤:编写代码、编译代码和运行程序。下面我将为你详细讲解这三个步骤: 1.1 编写代码 要编写Java程序,需要使用Java编程语言。Java是一种高级编程语言,非常易学易用。在编写Java程序时,可以使用任何文本编辑器。Jav…

    Java 2023年5月23日
    00
  • JSP中include指令和include行为的区别

    在JSP开发中,我们可以用include指令和include行为实现页面的嵌套和代码重用。这两种方式都可以将一个JSP文件嵌入到另一个JSP文件中,但是他们之间有着很大的区别。接下来我将为你详细讲解: 1. include指令和include行为的定义和特点 include指令是在编译阶段将被包含的JSP页面插入到主页面的指令。该指令导入的页面相当于主页面的…

    Java 2023年6月15日
    00
  • java实现堆排序以及时间复杂度的分析

    下面我会详细讲解“java实现堆排序以及时间复杂度的分析”的完整攻略,包括定义、算法步骤、实现过程和时间复杂度的分析。 定义 堆排序是一种树形选择排序,它的排序过程类似于选择排序,建立在堆的基础之上。堆是一个近似完全二叉树的结构,并同时满足堆积的性质: 父节点的键值总是大于或等于任何一个子节点的键值。 每个节点的左右子树都是一个堆。 算法步骤 创建一个初始数…

    Java 2023年5月19日
    00
  • java RSAUtils 加密工具类操作

    下面我来详细讲解一下“java RSAUtils 加密工具类操作”的完整攻略。 1. 什么是RSA加密 RSA加密是目前最为常用的非对称加密算法,由Ron Rivest、Adi Shamir 和Leonard Adleman 三人于1977年在MIT公布的,所以以他们三人的名字的头字母命名。 2. RSA加密的原理 RSA加密的原理很简单,就是通过生成一对公…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部