You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

尝试将Object复制到变量但未能复制全部属性

解决Error对象属性复制不全的问题

你遇到的问题核心是:Error实例的message和stack属于不可枚举属性,而对象展开语法(...)、Object.assign()这类常规复制方式,默认只会复制对象的可枚举自有属性。你能成功复制的statusCode、operationalError、success是自定义的可枚举属性,所以能被正常复制,而message和stack则会被忽略。

下面是几种可行的解决方法:

  • 手动显式复制不可枚举属性
    直接把message和stack单独提取出来,配合常规复制方式:

    // 对象展开语法实现
    const copiedErr = {
      ...err,
      message: err.message,
      stack: err.stack
    };
    
    // 或者用Object.assign实现
    const copiedErr = Object.assign({}, err);
    copiedErr.message = err.message;
    copiedErr.stack = err.stack;
    
  • 完整复刻Error实例(含原型链与所有属性)
    如果需要保留原Error对象的原型链、类型特征以及所有属性(包括不可枚举的),可以通过属性描述符实现完整复制:

    const copiedErr = Object.create(Object.getPrototypeOf(err));
    Object.defineProperties(copiedErr, Object.getOwnPropertyDescriptors(err));
    

内容的提问来源于stack exchange,提问作者Usama AHMED

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:35:22