Node.js中声明变量时包裹id、bio的大括号有什么作用

这个大括号是JavaScript ES6标准里的对象解构赋值语法,不是Node.js专属特性,所有支持ES6的JS运行环境都能使用。
两种写法的核心区别非常明确:
- 你写的
const id = req.params; const bio = req.body;,是把req.params整个对象完整赋值给id变量,把req.body整个对象完整赋值给bio变量。如果要拿到路径里的id参数,你还得额外写id.id才能取到具体值。 - 带大括号的写法(通常是
const { id } = req.params; const { bio } = req.body;),是直接从右侧的对象里,提取和大括号内变量名同名的属性值,赋值给对应变量。
举个具体的例子方便理解:
假设req.params的值是{ id: 'u_1001', type: 'normal' },req.body的值是{ bio: '全栈开发爱好者', age: 25 }
- 用你写的写法:
const id = req.params; const bio = req.body; console.log(id) // 输出完整对象 { id: 'u_1001', type: 'normal' } console.log(bio) // 输出完整对象 { bio: '全栈开发爱好者', age: 25 } // 要拿到真正的用户id和简介,还得再取一层属性 const realId = id.id const realBio = bio.bio - 用解构赋值写法:
const { id } = req.params; const { bio } = req.body; console.log(id) // 直接输出 'u_1001' console.log(bio) // 直接输出 '全栈开发爱好者'
解构赋值还有几个常用的便捷用法:
- 可以一次性提取多个属性,比如
const { id, name, avatar } = req.params一行就能声明三个变量,不用写多行赋值 - 支持给提取的变量设置默认值,比如
const { bio = '该用户暂未填写简介' } = req.body,如果请求体没传bio字段,变量会自动使用默认值,避免出现undefined - 支持给提取的值重命名,比如
const { id: userId } = req.params,这时候会把req.params.id的值赋值给userId变量,避免和作用域里其他同名变量冲突
小提示:解构时大括号里的变量名必须和右侧对象的属性名完全对应,才能正确取到值,否则变量值会是
undefined。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

