ES提案:可选链、双问号和管道语法

简介: ES提案:可选链、双问号和管道语法

因为ES6语法的普及体现了它的重要性再加上想要在温习一下ES6语法,不仅发现还有很多需要学习的地方,同时发现最新的提案例有这么几个特别牛逼(sao)的操作,同时提案已经进入了Stage3阶段了。
分别是可选链双问号管道语法

1.更多用法细节请了解---参考地址

2. 想学习ES6语法的朋友可以点此连接 ECMAScript 6 入门

3.更多提案

可选链

在开发的时候通常会遇到这种情况,为了严谨我们的代码是这样的

var nickName = user.name && user.nickname;
var value=  patient ? patient.value: undefine

再或者做判断

if (a && a.b && a.b.c) {
  // Todo
}

当有了新语法以上可写成下面这样

var nickName = user.name?.nickname;
var value=  patient.value? .value
if (a?.b?.c) {
// Todo
}

如果想在项目中使用此语法,需要babel7转译,插件选择@babel/plugin-proposal-optional-chaining

双问号

但在实际使用中,还是会有些不便,比如

const result = response?.settings?.n || 100

你的本意是如果 response 或者 response.settings 或者 response.settings.n 不存在(值为 null 或者 undefined)时,result 默认为 100。
但是上面代码在 n 为 0 的时候,也会让 result 变成 100,你实际上希望此时 result 为 0。
于是代码写成这样

const result = response?.settings?.n === undefined ? 100 : response?.settings?.n
或封装一下
const result = fetch(response?.settings?.n, 100)

所以双问号语法就来解决这个问题简化代码:

const result = response?.settings?.n ?? 100
?? 的意思是,如果 ?? 左边的值是 null 或者 undefined,那么就返回右边的值。

管道运算符

有时也会遇到这个场景,一个参数,不断经过函数处理,结果又被当作参数传给下个函数,代码可能是这样的:

const result = foo(bar(baz('hello world')))

管道给人的感觉就是一条流水线,从上到下,参数输入,结果输出,所以语法也很简洁:👍

const result = 'hello world' |> baz |> bar |>foo

想在项目中使用同样需要babel7,并使用@babel/plugin-proposal-pipeline-operator插件,

"plugin": [
  [
    "@babel/plugin-proposal-pipeline-operator",
    {
      "proposal": "minimal"
    }
  ]
]

注意,在配置.babelrc时需要指定proposal参数,更多参数请了解https://babeljs.io/docs/en/babel-plugin-proposal-pipeline-operator
如果函数还需要别的参数,那么可以这么写:

const result = 'hello world' |> baz |> (str => baz(str, 'other args')) |> foo

但是如此就看着不简洁了,所以有个备选方案:使用#代表上个结果值,即:

const result = 'hello world' |> baz |> baz(#, 'other args')) |> foo

更新

1、如果对你有帮助的话,记得给个赞赏加关注,鼓励一下。

相关文章
|
7月前
|
JavaScript 前端开发 网络架构
JavaScript开发中ES6+新特性:解释箭头函数的作用以及它与普通函数的区别。
JavaScript开发中ES6+新特性:解释箭头函数的作用以及它与普通函数的区别。
75 1
|
7月前
|
存储 程序员 编译器
【新手解答5】深入探索 C 语言:宏中的文本、标识符和字符串 + 递归运算、条件语句、循环 + `switch-case` 与多项条件和枚举的差别
【新手解答5】深入探索 C 语言:宏中的文本、标识符和字符串 + 递归运算、条件语句、循环 + `switch-case` 与多项条件和枚举的差别
83 0
|
开发者 Perl
正则表达式中的模式修正符S和M 妙用!
教你如何正确使用正则表达式中的模式修正符S和M!
70 0
正则表达式中的模式修正符S和M 妙用!
使项目支持es6新语法可选链“?.“以及双问号“??“
使项目支持es6新语法可选链“?.“以及双问号“??“
246 0
|
JavaScript
js双叹号将数据转换为布尔值
js双叹号将数据转换为布尔值
|
前端开发 JavaScript
前端祖传三件套JavaScript的ES6+之各种扩展:字符串、数值、函数、数组、对象、正则.
在前端开发中,ES6+ 为 JavaScript 带来了各种扩展功能,包括字符串、数值、函数、数组、对象、正则等方面的增强。本文将介绍 JavaScript 中各种扩展的基本概念和使用方法。
138 0
|
JavaScript 前端开发 安全
JavaScript语言基础:区分大小写、标识符、注释、严格模式和语句
JavaScript是一种强大的编程语言,具有灵活的语法和丰富的语言特性。本文将介绍JavaScript语言基础中的区分大小写、标识符、注释、严格模式和语句,以帮助初学者更好地理解JavaScript语言的基本概念和用法。
|
存储 JavaScript 前端开发
Java细节:单等于号、双等于号、三等于号(js中才有)的作用及双等于号和equals(源码)的区别
Java细节:单等于号、双等于号、三等于号(js中才有)的作用及双等于号和equals(源码)的区别
329 0
|
设计模式 算法
只会if-else和switch?多层逻辑判断的优雅写法
只会if-else和switch?多层逻辑判断的优雅写法
199 0
ES6新特性:函数优化(传参、箭头函数、简写)
ES6新特性:函数优化(传参、箭头函数、简写)
196 0
ES6新特性:函数优化(传参、箭头函数、简写)