Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • CSS

  • JavaScript

    • 兼容ie7的水平无限滚动
    • 节流防抖
    • 数组乱序
    • 开启全屏
    • 数据类型
    • 变量提升
    • this调用指向
    • 原型及原型扩展
    • js获取元素属性精度问题
    • setTimeout和setInterval
    • 数组判断
    • dom节点添加或插入元素
    • var、let和const的区别
    • 判断ellipsis是否省略生效
    • 使用ResizeObserver监听元素size变化
    • js自定义事件
    • use strict详解
    • 私有属性
    • js实现类的方式
    • call和apply的理解和使用
    • js失焦和点击事件顺序冲突
    • js中不常见但非常实用的运算符
    • for of和for in的区别
    • defer和async的区别
    • promise值穿透
    • js为什么会出现数字精确度丢失
    • js禁用F12开发者模式
    • 使用scrollTop和scrollTo滚动到目标位置
    • js实现打字机效果
    • 多种方式实现数组去重
    • 替换使用setTimeout
    • encodeURI和encodeURIComponent的区别
    • canvas实现弹跳小球
    • js实现跨标签页通信
    • 事件循环与微任务、宏任务
    • 浏览器存储数据方式
    • 常见的meta元数据使用
    • 使用InterSectionObserver判断元素区域(chatGPT)
  • 工具

  • Vue

  • antdv踩坑记录

  • Vue3

  • 前端
  • JavaScript
kros
2024-04-22

js中不常见但非常实用的运算符

# 空值合并运算符??

空值在js中是个很神奇的存在,我们通常使用!value来判断值value是否为空,但其实空字符串并不是真正的空值,空值(Null Value)表示一个空对象或未定义的值。JavaScript中的空值可以使用关键字null来表示。显然空字符串并不是真正的空值,这里js提供空值合并运算符用于处理空值的情况。合并运算符使用??表示,它可以将一个表达式的值与另一个默认值进行合并。如果表达式的值为空值(null或undefined),则使用默认值。

let value1 = null,value2 = undefined, value3 = 0, value4 = ''

let result1 = value1 ?? '空值' // 空值
let result2 = value2 ?? '空值' // 空值
let result3 = value3 ?? '空值' // 0
let result4 = value4 ?? '空值' // ''

1
2
3
4
5
6
7

# 可选链式运算符?.

当我们要访问一个复杂对象的深层属性时,如下:

let person = {
  name: '张三',
  address: {
    street: '北京西路32号',
    city: '北京',
    state: 'BJ'
  } 
}
1
2
3
4
5
6
7
8

如果该数据为静态时就无需判断,但我们取到的数据多半为api返回的并不能完全保证数据的完整性,为避免出错我们会先依次判断该属性链上的属性是否存在,比如我需要取person.address.city时

if (person && person.address) {
  // 安全使用person.address.city属性
}
1
2
3

这里可选链式运算符?.就排上用场了,可选链式运算符?. 可以用于链式调用,以便在访问嵌套对象的属性时,如果中间属性为空值(null或undefined),则可以终止链式调用并返回undefined。

const street = person.address?.street; // street = '123 Main St'
const zipCode = person.address?.zipCode; // zipCode = undefined
const country = person.address?.country?.name; // country = undefined
1
2
3

在上面的示例中,person.address?.street 返回了嵌套对象 person.address 的 street 属性的值。而 person.address?.zipCode 返回了 undefined,因为 person.address 对象没有 zipCode 属性。

可选链式运算符?. 可以帮助避免在访问嵌套对象属性时出现 TypeError,并提供了更安全的方式来处理可能为空值的情况。

上次更新: 2025/09/05, 8:09:00
js失焦和点击事件顺序冲突
for of和for in的区别

← js失焦和点击事件顺序冲突 for of和for in的区别→

最近更新
01
Find the next perfect square
09-05
02
Regex validate PIN code
09-05
03
Find the odd int
09-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 kros king
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev