你可能从未使用过的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虚拟机JVM性能优化(一):JVM知识总结

    在进行Java虚拟机JVM性能优化前,我们需要全面了解JVM的相关知识,这篇文章将对JVM进行总结,从而帮助我们提高程序性能。 JVM的定义及作用 JVM是Java虚拟机的缩写,它是Java程序能够在不同平台上运行的基础。JVM通过将Java字节码解释成平台相关的机器语言来实现这一功能,从而使Java程序能够在不同的操作系统上都能正常运行。 JVM架构 JV…

    Java 2023年5月19日
    00
  • Java数字签名算法DSA实例详解

    Java数字签名算法DSA实例详解 什么是数字签名算法? 数字签名算法是指利用公开密钥加密算法,对某些信息进行加密以验证信息的完整性、来源和真实性的技术。数字签名通常使用私钥进行签名和公钥进行验证。 DSA数字签名算法介绍 DSA是数字签名算法(Digtial Signature Algorithm)的缩写,是美国国家安全局(NSA)和国家标准局(NIST)…

    Java 2023年5月19日
    00
  • Mac M1 Java 开发环境配置详解

    下面是“Mac M1 Java 开发环境配置详解”的完整攻略: 环境准备 首先,我们需要确认自己的 Mac 是否使用 Apple Silicon 硅片,在 终端 中执行下面的命令进行确认: uname -m 如果输出结果为 arm64 或 aarch64,说明你的 Mac 采用了 Apple Silicon 硅片。 安装 JDK 因为 M1 Mac 采用的是…

    Java 2023年5月20日
    00
  • Dockerfile 部署java web的环境详解

    为了更好地说明这个话题,我会详细介绍 Dockerfile 部署 Java Web 环境的相关知识和攻略。 Dockerfile 部署 Java Web 环境详解 什么是 Dockerfile Dockerfile 是 Docker 用来定义镜像的文件,只要你写了 Dockerfile,就可以打造出一个完整的镜像,并且不需要手动干预,Docker 会自动构建…

    Java 2023年5月19日
    00
  • 解析Java和IDEA中的文件打包问题

    下面是关于解析Java和IDEA中的文件打包问题的完整攻略。 一、问题背景 在进行Java项目开发中,打包是非常重要的一个环节。Java的打包方式主要包括两种:jar和war。常见的打包工具有Maven、Gradle等,开发工具本身也自带打包机制,如IntelliJ IDEA中的Maven插件和Gradle插件。但是在实际操作中,我们经常会遇到一些打包问题,…

    Java 2023年5月19日
    00
  • EJB3.0开发之多对多和一对一

    下面我将为您详细讲解 EJB3.0 开发中的多对多和一对一关系的完整攻略。 EJB3.0 开发中多对多关系的实现 在 EJB3.0 开发中实现多对多关系,需要以下步骤: 定义实体类:定义要关联的两个实体类,并使用 @ManyToMany 注解来定义它们之间的关系,例如: “`java @Entity public class Teacher impleme…

    Java 2023年6月15日
    00
  • jsp中四种传递参数的方法

    下面我将详细讲解JSP中四种传递参数的方法: 1. URL传参 URL传参是一种最为简单和常见的传递参数方式,通过URL的?后面可以附上参数键值对。例如: http://localhost:8080/test.jsp?username=Tom&password=123456 在JSP中可以通过request.getParameter()方法获得对应的…

    Java 2023年6月15日
    00
  • java spring mvc处理器映射器介绍

    Java Spring MVC是一个非常流行的入门级Java Web框架,其最大的特点就是提供了高度的可配置性和灵活性,使得开发者可以很容易地使用IoC和AOP等高级技术。处理器映射器是Spring MVC的一部分,它充当了客户端请求和处理器的“中间人”,负责将请求映射到合适的处理器方法上。 以下是详细的“Java Spring MVC处理器映射器介绍”的攻…

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