4个很多人都不知道的现代JavaScript技巧

这篇具有很好参考价值的文章主要介绍了4个很多人都不知道的现代JavaScript技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JavaScript在不断的进化和升级,越来越多的新特性让我们的代码变得更加简洁。因此,今天这篇文章,我将跟大家分享 4 个不常用的 JavaScript 运算符。让我们一起研究它们。

1.可选的链接运算符

这个功能非常好用,它可以防止我的代码出错,甚至可以大大简化它。

例如,我们想打印一个人的名字,我敢打赌这很容易!没有困难。

const showName = (data) => {
  console.log(data.user.name)
}

showName({
  user: {
    name: 'fatfish'
  }
})

4个很多人都不知道的现代JavaScript技巧

不幸的是,我太粗心了,没有按照showName的要求传合法的参数,结果出事了。

const showName = (data) => {
  console.log(data.user.name)
}

showName('fatfish')

4个很多人都不知道的现代JavaScript技巧

你一定是一个有经验的软件工程师,所以很容易写出像下面这样的代码。

const showName = (data) => {
  console.log(data && data.user && data.user.name)
}

showName('fatfish')

4个很多人都不知道的现代JavaScript技巧

有没有更优雅的方式?如果数据层级嵌套太深,就是一段臭代码。

const showName = (data) => {
  console.log(data && data.user && data.user.person ...)
}

showName('fatfish')

别担心,Optional Chaining Operator 可以帮助我们。下面的代码不再抛出错误,这很棒。

const showName = (data) => {
  console.log(data?.user?.name)
}

showName('fatfish')

4个很多人都不知道的现代JavaScript技巧

什么是可选链接运算符?

来自 mdn的解释:可选的链接运算符 (?.) 访问对象的属性或调用函数。如果对象是 undefined 或 null,它返回 undefined 而不是抛出错误。

const adventurer = {
  name: 'Alice',
  cat: {
    name: 'Dinah'
  }
}

const dogName = adventurer?.dog?.name

console.log(dogName)
// expected output: undefined
console.log(adventurer.someNonExistentMethod?.())
// expected output: undefined

2.合并赋值 (??=)

来自mdn的解释:空值合并赋值 (x ??= y) 运算符仅在 x 为空值(null 或未定义)时才赋值。

const obj = {
  name: 'fatfish'
}

obj.name ??= 'medium'
obj.age ??= 100
console.log(obj.name, obj.age)

是的,最后只分配了 age 属性。

小伙伴们,你们觉得哪一行代码更接近??=?的功能呢?答案1还是答案2?

// 1.
x ?? (x = y)
// 2.
x = x ?? y

我想你猜对了,答案是1。

因为答案2在任何情况下都会赋值x,而答案1只有在x为真时才会赋值。

它能为我们做什么?

那么,我们可以用它做什么呢?是的,它可以做与默认参数完全相同的事情。

const showName = (name) => {
  name ??= 'fatfish'
  console.log(name)
}

showName('medium') // medium
showName() // fatfish

它几乎等同于以下代码。

const showName = (name = 'fatfish') => {
  console.log(name)
}

showName('medium') // medium
showName() // fatfish

好吧,我不得不承认编写默认参数让我更快乐。

3.逻辑或赋值(||=)

来自 mdn的解释:逻辑或赋值 (x ||= y) 运算符仅在 x 为假时才赋值。

const obj = {
  name: '',
  age: 0
}

obj.name ||= 'fatfish'
obj.age ||= 100

console.log(obj.name, obj.age) // fatfish 100

小伙伴们可以看到,当x的值为假值时,赋值成功。

它能为我们做什么?

来自mdn:如果“lyrics”元素为空,则显示默认值:

document.getElementById("lyrics").textContent ||= "No lyrics."

短路在这里特别有用,因为元素不会进行不必要的更新,也不会导致不必要的副作用,例如,额外的解析或渲染工作,或失去焦点等。

4.逻辑与赋值(&&=)

来自mdn:逻辑与赋值 (x &&= y) 运算符仅在 x 为真时才赋值。

与逻辑或赋值 (||=) 相反,只有 x 为真时才会正确赋值。文章来源地址https://www.toymoban.com/news/detail-431520.html

const obj = {
  name: 'fatfish',
  age: 100
}

obj.name &&= 'medium' // medium
obj.age &&= 1000 // 1000
console.log(obj.name, obj.age) // medium 1000

到了这里,关于4个很多人都不知道的现代JavaScript技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 别人都不知道的“好用”网站,让你的效率飞快

    ✅🎡个人主页:程序猿追 ✅🎡系列专栏:【日常学习上的分享】 ✅🎡目前状态:创建Java学习之路(零基础到就业实战)系列,目前更新到JAVAWEB开发 ✅🎡作者简介:大家好,我是程序猿追,全栈领域新星创作者,算法爱好者,常在作者周榜排名前30,某不知名的 ACMer ✅🎡

    2024年02月10日
    浏览(81)
  • 扩展点都不知道不要说你用了Spring Boot

    哈哈,本次有点标题党的嫌疑了,话又说回来,如果只停留在Spring Boot的基本的CRUD层面,未免也太过局限了,当需要去扩展一些功能,写一些组件的时候,就感觉无从下手了,所以本次,我们从一个标题党开始,了解一下Spring Boot 的扩展点,可以系统的了解记忆一下, 此文不

    2024年02月15日
    浏览(66)
  • 面试被打脸,数据结构底层都不知道么--回去等通知吧

    数据结构之常见的8种数据结构: -数组Array -链表 Linked List -堆 heap -栈 stack -队列 Queue -树 Tree -散列表 Hash -图 Graph 数据结构-链表篇 Linklist定义: -是一种线性表,并不会按线性的顺序存储数据,即逻辑上相邻,物理上不一定相邻的元素。通过指针域来寻找对应的元素。 Linkli

    2024年02月10日
    浏览(29)
  • 2023面试被打脸,数据结构底层都不知道么--回去等通知吧

    数据结构之常见的8种数据结构: -数组Array -链表 Linked List -堆 heap -栈 stack -队列 Queue -树 Tree -散列表 Hash -图 Graph 数据结构-链表篇 Linklist定义: -是一种线性表,并不会按线性的顺序存储数据,即逻辑上相邻,物理上不一定相邻的元素。通过指针域来寻找对应的元素。 Linkli

    2024年02月10日
    浏览(26)
  • Spring Security 自带防火墙!你都不知道自己的系统有多安全!

    一个是严格模式的防火墙设置,还有一个默认防火墙设置。 DefaultHttpFirewall 的限制相对于 StrictHttpFirewall 要宽松一些,当然也意味着安全性不如 StrictHttpFirewall。 Spring Security 中默认使用的是 StrictHttpFirewall。 2.防护措施 那么 StrictHttpFirewall 都是从哪些方面来保护我们的应用呢?

    2024年04月26日
    浏览(21)
  • 百分之80新手都不知道,SEO搜索引擎优化【sitemap网站地图 配置】

    Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页。最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智

    2023年04月09日
    浏览(57)
  • 很多人还不知道中视频计划手机上发布多端横竖屏视频的方法

    如果说你刚开始接触中视频,你必须要学会的小知识。 横屏视频是16;9的视频,一般是手机横向拍摄的视频。 上传这样的视频有两种方法。第一种是需要用到电脑,第二种就是我今天要分享的这种,没有电脑,我们用手机也能办到。从我赢助手掌握这个方法后,今天给大家

    2024年02月09日
    浏览(27)
  • 什么???你连vue中父组件怎么监听子组件的事件都不知道?快来看看vue2和vue3中父组件监听子组件事件的区别吧

    vue2和vue3中父组件监听子组件事件的区别 在Vue 2中,可以使用$emit方法在子组件上触发自定义事件,并使用v-on或@指令在父组件中监听该事件,也就是通过父组件给子组件绑定一个自定义事件实现子给父传递数据。例如: 在这个例子中,当子组件中的按钮被单击时,将触发ch

    2024年02月12日
    浏览(33)
  • 【好书推荐】深入理解现代JavaScript

    T. J. Crowder是一位拥有30年经验的软件工程师。在他的整个职业生涯中,他至少有一半时间是在使用JavaScript从事开发工作。他经营着软件承包和产品公司Farsight Software。他经常在Stack Overflow上为人们提供帮助,他是十大贡献者之一和JavaScript标签的顶级贡献者。当他不工作或写作

    2024年02月08日
    浏览(29)
  • 【JavaScript】3.4 JavaScript在现代前端开发中的应用

    JavaScript 是现代前端开发的核心。无论是交互效果,还是复杂的前端应用,JavaScript 都发挥着关键作用。在本章节中,我们将探讨 JavaScript 在现代前端开发中的应用,包括如何使用 JavaScript 来处理用户交互、动态内容、前端路由、API 请求等。 JavaScript 是处理用户交互的主要工

    2024年02月04日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包