解构赋值是什么_如何从对象中提取数据【教程】
发布时间 - 2026-01-30 00:00:00 点击率:次解构赋值是ES6引入的语法糖,通过{ name, age }从对象提取属性值,要求左右结构匹配、左侧必须为{}、支持重命名和默认值,嵌套解构需逐层设默认空对象防错。
解构赋值就是用花括号直接“拆”对象
它不是新函数,也不是库,而是 JavaScript(ES6 起)原生支持的语法糖:用 { name, age } 这种写法,从对象里一次性把值拎出来,省得反复写 obj.name、obj.age。本质是“模式匹配”——左边的结构要和右边对象的属性名对得上。
- 必须是对象字面量形式,即左边一定要用
{},不能用[]或其他 - 变量名默认和属性名一致;不一致时得用
name: userName重命名 - 如果属性不存在,对应变量就是
undefined,不会报错 -
null和undefined不能被解构,否则直接抛TypeError
如何安全地从嵌套对象中取值
遇到 user.profile.address.city 这种三级结构,别一层层判空再解构。用嵌套解构 + 默认值更稳:
const { profile: { address: { city = '未知' } = {} } = {} } = user;
这行代码的关键点:
- 每一层都加了默认空对象
= {},防止中间某层为undefined导致报错 - 最内层用
city = '未知'提供兜底值 - 顺序不能乱:
profile必须先解构,才能继续解构它的address - 注意
profile: { ... }中的profile是“模式”,不是变量名;若你还想保留profile对象本身,得额外写profile在左边,如{ profile, profile: { address: { city } } }
函数参数里用解构,但别漏掉类型或默认值
在 TypeScript 或强校验场景下,光写 function fn({ url, method }) 很危险——如果调用方传了个没 url 的对象,运行时就 undefined 了。正确做法:
- 加默认值:
function fn({ url = '/', method = 'GET' } = {}) {...},等号
右边的
= {}防止传undefined直接崩 - TypeScript 用户务必补接口或类型注解,否则解构变量无类型提示:
function fn({ url, method }: { url: string; method: string }) - 避免在解构里做复杂计算或副作用,比如
{ data: fetchData() }—— 解构只该干“取值”这一件事
常见翻车现场:解构时变量已声明却忘了括号
如果你先写了 let name, age;,后面想用解构赋值,直接写 { name, age } = user; 会报错:SyntaxError: Unexpected token。因为 JS 把开头的 { 当成了代码块,不是解构语法。
修复方式只有一种:加括号
({ name, age } = user);
- 仅当变量已声明(
let/const/var)时才需要括号 - 用
const { name, age } = user;就完全没问题,这是最推荐的写法 - 别试图用逗号运算符绕过,比如
({}, { name, age } = user)—— 可读性差且无必要
{}、右边有没有可能是 null、变量到底声明了没。
# javascript
# es6
# java
# js
# typescript
# String
# NULL
# 运算符
# Token
# const
# 无类型
# 接口
# var
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
UC浏览器如何设置启动页 UC浏览器启动页设置方法
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Swift中循环语句中的转移语句 break 和 continue
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
JavaScript Ajax实现异步通信
如何获取上海专业网站定制建站电话?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
详解Android中Activity的四大启动模式实验简述
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
浅谈Javascript中的Label语句
油猴 教程,油猴搜脚本为什么会网页无法显示?
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
C++用Dijkstra(迪杰斯特拉)算法求最短路径
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
详解Oracle修改字段类型方法总结
Laravel如何实现文件上传和存储?(本地与S3配置)
Laravel用户密码怎么加密_Laravel Hash门面使用教程
php json中文编码为null的解决办法
Android 常见的图片加载框架详细介绍
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
Mybatis 中的insertOrUpdate操作
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
简单实现Android文件上传
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
js代码实现下拉菜单【推荐】
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
如何在橙子建站中快速调整背景颜色?
Android利用动画实现背景逐渐变暗
Laravel如何集成Inertia.js与Vue/React?(安装配置)
利用JavaScript实现拖拽改变元素大小
Laravel集合Collection怎么用_Laravel集合常用函数详解
Laravel如何实现API版本控制_Laravel版本化API设计方案
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
EditPlus中的正则表达式实战(5)
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
在线制作视频的网站有哪些,电脑如何制作视频短片?
微信小程序 wx.uploadFile无法上传解决办法
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
如何在IIS7中新建站点?详细步骤解析
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
Laravel如何实现数据库事务?(DB Facade示例)


