Js中的对象解构赋值

83 阅读2分钟
JavaScript/TypeScript中的对象解构赋值,是一种从对象中提取属性值的简介语法。
示例:
const { level, id, key } = node;
等同于:
const level = node.level;
const id = node.id;
const key = node.key;

深入解析:

1.工作原理
  • 从 node 对象提取 level,id,key 属性
  • 将提取的值分别赋给同名的变量 level, id, key
  • 如果 node 缺少某个属性, 对应变量会被赋值为 undefined
2.扩展用法
(1)重命名变量
const { id: userId, key: itemKey} = node;
// 相当于:
// const userId = node.id;
// const itemKey = node.key;
(2)默认值
const { level = 1, id = 'default-id' } = node;
// 如果node.level是undefined/null,level将被赋值为1
(3)嵌套解构
const {
    data: {
        user: { name, age }
    }
} = response;
// 从深层嵌套对象中取值
(4)剩余模式
const { id, ...rest } = node;
id = node.id;
rest = { level: node.level, key: node.key, ... } // (除id以外其他属性)
(5)函数参数解构
function processNode({ id, level }: { id: string; level: number}) {
    // 直接使用id和level
}
3.Typescript中的类型注解
const { level, id, key }: { level:number; id: string; key: string } = node;
或者使用接口
interface Node {
    level: number;
    id: string;
    key: string
}

const { level, id, key }: Node = node;

实际应用场景

1.React组件Props接收
const MyComponent = ({ title, onClick }: { title: string; onClick: () => void}) => {
    // 直接使用title和onClick
}
2.API响应处理
fetch('/api/data')
    .then(({ status, data })) => {
        // 直接使用status和data
    }
3.配置对象处理
function init({ url, timeout = 5000, retry = 3}) {
    // 使用配置参数
}
4.交换变量值
let a = 1, b = 2;
[a, b] = [b, a]; // 交换a, b的值

注意事项

  1. 属性不存在时会赋值 undefined, 可使用默认值避免。
  2. 解构 null/undefined 时会报错,需要确保对象存在
const { id } = node || {};
  1. 性能考虑: 大量深层嵌套解构赋值会影响可读性。
  2. 类型安全: 在TypeScript中最好配合接口/类型使用。

解构赋值是现代JavaScript/Typescript开发中极为常用的特性,能显著提高代码的简洁性和可读性。