讲师中心 微信公众号
AI工具推荐 视频效率加速

如何优雅地简化 JavaScript 中的 undefined 值校验

落伟大大_5154

落伟大大_5154

发布时间:2026-02-14 18:10:12

|

913人浏览过

|

来源于php中文网

原创

如何优雅地简化 JavaScript 中的 undefined 值校验

本文介绍如何结合可选链操作符(?.)与空值合并操作符(??)安全、简洁地访问嵌套 json 数据,避免因空数组、缺失属性或 undefined 导致的运行时错误。

本文介绍如何结合可选链操作符(?.)与空值合并操作符(??)安全、简洁地访问嵌套 json 数据,避免因空数组、缺失属性或 undefined 导致的运行时错误。

在现代 JavaScript 开发中,频繁处理深层嵌套的 API 响应(如 GraphQL 或 RESTful JSON)时,传统防御性判空(如 if (obj && obj.a && obj.a.b))不仅冗长,还容易遗漏边界情况——例如当 names 是一个空数组 [] 时,data?.body?.data?.names[0]?.firstName 会因尝试访问 [0] 而返回 undefined,但不会抛错;真正的问题在于:它无法区分“路径中途断开”和“值本身为 undefined”,更难以统一提供默认值。

✅ 正确解法:组合使用 ?. 与 ??

可选链 ?. 负责安全穿透可能为 null 或 undefined 的中间节点(包括对象属性、数组索引、函数调用),而空值合并 ?? 则在左侧表达式为 null 或 undefined 时提供兜底值。二者配合,可一行代码完成“安全取值 + 默认回退”。

以下为完整示例:

Java Api Extractor
Java Api Extractor

从 Java 项目中提取 Controller 层接口定义为 JSON 数据。

下载

立即学习“Java免费学习笔记(深入)”;

const data = {
  body: {
    data: {
      names: [
        { firstName: 'John' },
        { firstName: 'Johnn' }
      ]
    }
  }
};

// ✅ 安全获取首个 firstName,若任意环节缺失则返回 'Unknown'
const firstName = data?.body?.data?.names?.[0]?.firstName ?? 'Unknown';
console.log(firstName); // 'John'

// ✅ 即使 names 不存在、为空对象或为空数组,均不会报错
const dataWithoutNames = {
  body: { data: {} }
};
const fallbackName = dataWithoutNames?.body?.data?.names?.[0]?.firstName ?? 'Unknown';
console.log(fallbackName); // 'Unknown'

// ✅ 空数组场景也适用(names: [] → [0] → undefined → 触发 ??)
const emptyNames = {
  body: { data: { names: [] } }
};
const emptyResult = emptyNames?.body?.data?.names?.[0]?.firstName ?? 'No Name';
console.log(emptyResult); // 'No Name'

⚠️ 注意事项:

  • ?.[0] 中的方括号必须带 ?. 前缀,否则 names[0] 在 names === undefined 时会直接抛 TypeError: Cannot read property '0' of undefined;
  • ?? 仅在左侧为 null 或 undefined 时生效,若值为 0、false、''(空字符串)等 falsy 值,不会触发默认值——这是其区别于 || 的关键优势;
  • 若需兼容旧浏览器(如 IE),需通过 Babel 编译并启用 @babel/plugin-proposal-optional-chaining 和 @babel/plugin-proposal-nullish-coalescing-operator 插件。

? 总结:摒弃多层 && 判空或冗长 if 语句,优先采用 ?. + ?? 组合。它语义清晰、执行高效、可读性强,是 TypeScript 和现代 JavaScript 工程中处理不确定数据结构的推荐实践。

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

312

2026.02.13

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

540

2026.02.25

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

391

2026.03.13

TypeScript 全栈开发进阶指南
TypeScript 全栈开发进阶指南

面向有 JavaScript 基础的开发者,深入讲解 TypeScript 的类型系统与全栈开发实践。

306

2026.06.03

TypeScript Node.js 全栈工程化与Monorepo架构实践
TypeScript Node.js 全栈工程化与Monorepo架构实践

本专题围绕 TypeScript 在 Node.js 全栈开发中的工程化实践展开,系统讲解 Monorepo 架构设计、包管理策略、模块复用机制以及服务端与前端统一类型系统的构建方法。通过真实项目案例,帮助开发者提升大型全栈项目的可维护性与协作效率。

718

2026.06.16

PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

564

2025.11.26

Python GraphQL API 开发实战
Python GraphQL API 开发实战

本专题系统讲解 Python 在 GraphQL API 开发中的实际应用,涵盖 GraphQL 基础概念、Schema 设计、Query 与 Mutation 实现、权限控制、分页与性能优化,以及与现有 REST 服务和数据库的整合方式。通过完整示例,帮助学习者掌握 使用 Python 构建高扩展性、前后端协作友好的 GraphQL 接口服务,适用于中大型应用与复杂数据查询场景。

229

2026.01.21

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2255

2023.08.07

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn