关于Javascript中值得学习的特性总结

目录
  • 可选链操作符(Optional Chaining Operator)
  • 空值合并运算符(Nullish Coalescing Operator)
  • Promise.allSettled()
  • BigInt类型

可选链操作符(Optional Chaining Operator)

可选链操作符允许我们在一个对象的属性值为空或未定义时,直接返回undefined,而不会抛出“Cannot read property 'xxx' of undefined”等错误。这样的好处是可以简化代码,避免繁琐的判断逻辑。例如:

const person = {
  name: 'Tom',
  age: 18,
  address: {
    city: 'Shanghai'
  }
};

// 普通写法
if (person && person.address && person.address.city) {
  console.log(person.address.city);
} else {
  console.log('unknown');
}

// 可选链写法
console.log(person?.address?.city ?? 'unknown');

在上述代码中,我们使用了可选链操作符(?)和nullish合并运算符(??),将原本需要多次判断的代码缩减到了一行。如果person、address或city不存在,则会直接返回undefined或'unknown'。

空值合并运算符(Nullish Coalescing Operator)

空值合并运算符允许我们在变量为空或undefined时,直接返回默认值。与传统的||操作符不同,它只会在变量为null或undefined时返回默认值,而不是在变量为0、空字符串或false时也返回默认值。例如:

const name = '';

// 普通写法
const username = name || 'unknown';

// 空值合并写法
const username = name ?? 'unknown';

在上述代码中,我们使用了空值合并运算符(??)将原本需要繁琐判断的代码简化到了一行,如果name为空或undefined,则会返回'unknown'。

Promise.allSettled()

Promise.allSettled()方法可以接收一个由Promise对象组成的数组,等待所有Promise对象都执行完成后,返回一个包含所有Promise对象的状态信息(fulfilled/rejected)和结果值(value/reason)的数组。与Promise.all()不同的是,即使其中某个Promise被reject,Promise.allSettled()仍然会等待其他Promise对象执行完毕后再返回结果。例如:

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

Promise.allSettled(promises).then(results => {
  results.forEach(result => {
    console.log(result.status, result.value);
  });
});

在上述代码中,我们使用了Promise.allSettled()方法获取了所有Promise对象的状态信息和结果值,并使用forEach遍历输出了它们的状态(fulfilled/rejected)和结果值(value/reason)。

BigInt类型

BigInt类型是ES2020新引入的一种数据类型,用于表示任意精度的整数。相较于Number类型,它能够处理更大的整数,避免了溢出和精度丢失的问题。例如:

const x = BigInt(Number.MAX_SAFE_INTEGER);
const y = BigInt('9007199254740993');
const z = x + y;

console.log(z); // 9007199254740994n

在上述代码中,我们使用了BigInt类型来表示较大的整数,并通过+运算符对它们进行了加法计算。

以上就是关于Javascript中值得学习的特性总结的详细内容,更多关于Javascript特性的资料请关注我们其它相关文章!

(0)

相关推荐

  • Nodejs新特性async和await的使用详解

    目录 1.Es6常见语法的使用 2.Async.Await和Promise 1.Es6常见语法的使用 1.let.const let:是一个块作用域 if (true) { let a = 123; } console.log(a); // a is not defined const:定义常量 const PI = 3.1415926; PI = 3.15 // Assignment to constant variable. console.log(PI) var:全局变量 2.箭头函数 s

  • 5个实用的JavaScript新特性

    目录 前言 1.# 使用"Object.hasOwn"替代“in”操作符 2.# 使用"#"声明私有属性 3.# 超有用的"数字分隔符" 4.# 使用"?."简化"&&"和三元运算符 5.# 使用"BigInt"支持大数计算 最后 前言 JavaScript在不断地升级迭代,越来越多的新特性让我们的代码写起来变得简洁有趣,这篇文章会介绍5个新特性,一起研究一下把. 1.#

  • Mysql 5.7 新特性之 json 类型的增删改查操作和用法

    目录 插入数据 :insert操作 更新记录:update 追加内容: 更新记录:追加内容到数组: 更新记录:update 修改json属性: 删除记录: 查询记录: 扩展: 一.插入一条数据: 1.查找 JSON 中的某个字段: 2.根据JSON中的某个字段查询表中记录: 二.修改 JSON 1.修改 JSON 中的某个字段: 2.往 JSON 中插入一个新的字段: 近几年来,nosql大行其道,json更是火的一塌糊涂,作为数据库的元老,mysql在5.7版本中添加了对json数据的支持.这

  • 详解JavaScript中的属性和特性

    JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaScript中对象的本质.对象与类的关系.对象与引用类型的关系 对象属性如何进行分类 属性中特性的理解 第一部分:理解JavaScript中对象的本质.对象与类的关系.对象与引用类型的关系 对象的本质:ECMA-262把对象定义为:无序属性的集合,其属性可以包含基本值.对象或者函数.即对象是一组没有特定顺序的值,对象的每个属性或方法都有一个名字,

  • Javascript中从学习bind到实现bind的过程

    bind是什么 bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列. var result = fun.bind(thisArg[, arg1[, arg2[, ...]]]) result(newArg1, newArg2...) 没看懂没事接着往下看. bind到底做了什么 从上面的介绍中可以看出三点.首先调用bind方法会返回一个新的函数(这个新的函数的函数体应该和fun是一样的).同时bind中传递两个参

  • javascript中常用编程知识

    1.null 与 undefined * 从一个对象中获取某个属性,如果该对象及其 prototype 链 中的对象都没有该属性的时候,该属性的值为 undefined . * 一个 function 如果没有显式的通过 return 来返回值给其调用者的话,其返回值就是 undefined .有一个特例就是在使用new的时候. * JavaScript 中的 function 可以声明任意个形式参数,当该 function 实际被调用的时候,传入的参数的个数如果小于声明的形式参数,那么多余的形

  • JavaScript中的闭包(Closure)详细介绍

    闭包是JavaScript中一个重要的特性,其最大的作用在于保存函数运行过程中的信息.在JavaScript中,闭包的诸多特性源自函数调用过程中的作用域链上. 函数调用对象与变量的作用域链 对于JavaScript中的每一次函数调用,JavaScript都会创建一个局部对象以储存在该函数中定义的局部变量:如果在该函数内部还有一个嵌套定义的函数(nested function),那么JavaScript会在已经定义的局部对象之上再定义一个嵌套局部对象.对于一个函数,其内部有多少层的嵌套函数定义,也

  • javascript中的正则表达式使用详解

    [1]定义:正则又叫规则或模式,是一个强大的字符串匹配工具,在javascript中是一个对象 [2]特性: [2.1]贪婪性,匹配最长的 [2.2]懒惰性,不设置/g,则只匹配第1个 [3]两种写法: [3.1]perl写法(使用字面量形式): var expression = /pattern/flags; e.g. var pattern = /a/i;//匹配字符串中所有'a'的实例 [3.1.1]三个标志flags [a]g:表示全局模式(global) [b]i:表示不区分大小写(i

  • JavaScript中的数组特性介绍

    与Java语言不同,JavaScript中的数组拥有三个特性: 1.无类型.数组的成员可以是任何类型,同一个数组也可以由很多不同类型的成员所组成. 2.长度可变.数组的长度是可以动态变化的,因此在JavaScript中不存在数组访问的越界问题. 3.不连续性.数组中成员的位置可以是连续的(0, 1, 2, 3-),也可以是不连续的.任何数组都有一个名为length的属性,在数组成员连续的情况下,length值与数组成员数目一致:当数组成员不连续时,length值要大于数组成员的数目.与连续的数组

  • 深入学习 JavaScript中的函数调用

    定义 可能很多人在学习 JavaScript 过程中碰到过函数参数传递方式的迷惑,本着深入的精神,我想再源码中寻找些答案不过在做这件事之前,首先明确几个概念.抛弃掉值传递.引用传递等固有叫法,回归英文: call by reference && call by value && call by sharing 分别是我们理解的 C++ 中的引用传递,值传递.第三种比较迷惑,官方解释是 receives the copy of the reference to object

  • 浅谈TypeScript3.7中值得注意的3个新特性

    前言 距typescript 3.7正式发布已经有一段时间了,这段时间正在对手上的项目进行typescript的迁移工作,所以会特别留意每一次的release. 对于3.7中包含的新特性,其实相比较之前几次release来说,算是一个比较小的发布版本,但是其中包含的几个特性对代码质量本身,会带来显著地提升. Optional Chaining 首先第一个特性是对于optional chaining操作符的支持,翻译过来应该可以叫做可选链操作符,当然我还是觉得这样翻译有点怪怪的,暂且就直接用英文好

  • 学习JavaScript中的闭包closure应该注意什么

    目录 闭包简述 1.闭包使得内部函数可以访问外部函数的属性(变量或方法) 2.闭包的广阔应用场景 3.用闭包模拟私有方法 4.从性能角度考虑,非必要不使用闭包 闭包简述 Mozilla 上这样解释闭包:一个函数和对其周围状态(lexical environment,词法环境) 的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure). 也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域.在 JavaScript 中, 每当创建一个函数, 闭包就会在函数创建的同时

  • JavaScript 正则表达式中global模式的特性

    返回 Boolean 值,指出正则表达式使用的global 标志 (g) 的状态.默认值为 false.只读. rgExp.global 必选项 rgExp 参数是正则表达式对象. 如果正则表达式设置了global 标志,那么global 属性返回 true,否则返回 false. 使用 global 标志表明在被查找的字符串中搜索操作将查找所有符合的项,而不仅仅是第一个.这也被称为全局匹配. 一直不是很清楚javascript的global到底表现在哪些方面,所以今天特地做了几个测试: var

随机推荐