WEB程序员笔记

一个前端开发工程师的个人博客

ES2020:通过Babel插件实现空虚合并

文森特·博塔(Vincent Botta)在Unsplash上​​拍摄的照片

进入2020年,许多开发人员一直在关注ECMAScript 2020(ES2020)提供的功能!这是一个简短的教程,说明如何利用??该GitHub存储库中指定的Nullish Coalescing运算符:JavaScript的Nullish Coalescing

获取和添加插件

如果您已经在工作流程中配置了babel,则就像为babel安装提案插件一样简单(如果没有,请查看本系列的第1部分!)

npm i --save-dev @babel/plugin-proposal-nullish-coalescing-operator

然后babel.rc使用刚刚安装的插件更新您的插件!

{
  ...,
  "plugins": [..., "@babel/plugin-proposal-nullish-coalescing-operator"]
}

这就是您能够使用new运算符??并为浏览器编译为兼容代码所需的一切!

Babel将解析,转换,然后将代码打印出来作为最终输出。默认情况下,转换阶段不执行任何操作!这就是插件发挥作用的地方-通常,您仅需使用@babel/preset-env最新和最出色的JavaScript 就可以逃脱。* 但是,当您要像Nullish Coalescing那样使用真正的前沿技术时,您将需要找出要使用的特定插件,如本教程中所示。

简单的??例子

无效合并的基本原理是当值是null或时,可以使用合理的默认值undefined。人们先检查是否存在然后再使用默认值的旧方法是使用or运算符:let displayname = username || "User Profile";在这里将检查用户名是否存在,如果未找到,则默认为string "User Profile"

这种旧方法的问题""在于,在此表达式中,诸如空字符串之类的内容被强制变为虚假!该??操作使用默认nullundefined。这是一个简单的示例-此代码:

const logUsername = username => {
    let displayname = username ?? "User Profile";
    console.log(displayname);
}

const oldLogUsername = username => {
    let displayname = username || "User Profile";
    console.log(displayname);
}

console.log("New logging of username: ");
logUsername(null);
logUsername("");
logUsername("bamartindev");

console.log("\nOld logging of username: ");
oldLogUsername(null);
oldLogUsername("");
oldLogUsername("bamartindev");

将编译为:

"use strict";

const logUsername = username => {
  let displayname = username !== null && username !== void 0 ? username : "User Profile";
  console.log(displayname);
};

const oldLogUsername = username => {
  let displayname = username || "User Profile";
  console.log(displayname);
};

console.log("New logging of username: ");
logUsername(null);
logUsername("");
logUsername("bamartindev");
console.log("\nOld logging of username: ");
oldLogUsername(null);
oldLogUsername("");
oldLogUsername("bamartindev");

并且将输出以下内容:

New logging of username:
User Profile

bamartindev

Old logging of username:
User Profile
User Profile
bamartindev

请注意,这是替代??

let displayname = username !== null && username !== void 0 ? username : "User Profile";

因此,理论上我们也可以编写logUsername(void 0);并获取的输出"User Profile",但是我不确定何时会发生when

结束

本小节教程到此结束,内容涉及如何将插件添加到babel配置中,以及为什么将来可能需要这样做!

如果您发现此帖子有任何问题,请告诉我,以便我进行编辑并大声疾呼!

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注