Typescript spread运算符是否在操作后返回新对象?

Typescript spread运算符是否在操作后返回新对象?,typescript,Typescript,据我所知,spread运算符在操作后返回一个新对象: let a = {a:1}; let b = {a: 2} let a = {...a,...b} 因此,最后一个a没有引用到a,它是内存中的一个新对象 是否可以在不更改初始对象(我是指内存中的引用)的情况下使用扩展运算符?它由保证,并且从具有“扩展语法”的对象文本返回的对象始终是新对象 规范的相关部分: 让obj成为ObjectCreate(%ObjectPrototype%) 及 属性定义:…赋值表达式 1.让exprValue作为计算

据我所知,spread运算符在操作后返回一个新对象:

let a = {a:1};
let b = {a: 2}
let a = {...a,...b}
因此,最后一个
a
没有引用到
a
,它是内存中的一个新对象

是否可以在不更改初始对象(我是指内存中的引用)的情况下使用扩展运算符?

它由保证,并且从具有“扩展语法”的对象文本返回的对象始终是新对象

规范的相关部分:

  • obj
    成为
    ObjectCreate(%ObjectPrototype%)
  • 属性定义:…赋值表达式

    1.让
    exprValue
    作为计算
    AssignmentExpression
    的结果
    2.让
    fromValue
    be<代码>获取值(导出值)
    3.让
    excludedNames
    成为一个新的空列表。
    4.返回
    ?CopyDataProperties(对象、fromValue、excludedNames)

    除了直接指定对象的属性外,目前没有其他方法可以改变对象

    如评论中所述:当我回答关于
    javascript
    的问题时,问题被标记为
    typescript
    。问题是TS编译器必须保留本机js运行时语义,因此在这种情况下,可以参考ES2018标准。

    它由保证,并且从具有“扩展语法”的对象文本返回的对象始终是新对象

    规范的相关部分:

  • obj
    成为
    ObjectCreate(%ObjectPrototype%)
  • 属性定义:…赋值表达式

    1.让
    exprValue
    作为计算
    AssignmentExpression
    的结果
    2.让
    fromValue
    be<代码>获取值(导出值)
    3.让
    excludedNames
    成为一个新的空列表。
    4.返回
    ?CopyDataProperties(对象、fromValue、excludedNames)

    除了直接指定对象的属性外,目前没有其他方法可以改变对象



    如评论中所述:当我回答关于
    javascript
    的问题时,问题被标记为
    typescript
    。问题是TS编译器必须保留本机js运行时语义,因此在这种情况下,可以参考ES2018标准。

    这是不可能的-ES2018保证它始终是一个新对象。PS:这不是运算符,而是“扩展语法”,有其他选择吗?如下所示:
    var obj=Object.assign(updateobject)替代什么?我认为没有比
    对象更好的方法了。分配(a,b)
    b
    的属性添加到现有对象
    a
    。如果您想保留相同的对象-只需手动分配其属性这是不可能的-ES2018保证它始终是一个新对象。PS:这不是运算符,而是“扩展语法”,有其他选择吗?如下所示:
    var obj=Object.assign(updateobject)替代什么?我认为没有比
    对象更好的方法了。分配(a,b)
    b
    的属性添加到现有对象
    a
    。如果要保留相同的对象,只需手动分配到其属性。请注意,问题已标记为
    typescript
    ;给定的代码可能会也可能不会转换为扩展语法,这取决于转换目标。@HereticsMonkey它必须保留扩展语法语义though@HereticMonkey有趣的是,TS规范根本没有提到对象参数扩展语法(我将第二个
    let a
    更改为
    let ab
    )您可以看到它们使用
    对象。分配
    :(.顺便说一句,你的答案很准确,只是想提醒你TypeScript的…怪癖。请注意,问题被标记为
    TypeScript
    ;给定的代码可能会也可能不会转换成排列语法,这取决于转换目标。@HereticMonkey它必须保留排列语法语义though@HereticMonkey这很有趣TS规范根本没有提到对象参数扩展语法。如果您查看传输的代码(我将第二个
    let a
    更改为
    let ab
    ),您可以看到它们使用
    object.assign
    :(。顺便说一下,您的答案很准确,只是想提醒您TypeScript的…怪癖。