当前位置: 首页 > 面试题库 >

对象传播与Object.assign

符风畔
2023-03-14
问题内容

假设我有一个options变量,并且想要设置一些默认值。

这两种选择的优点/缺点是什么?

使用对象传播

options = {...optionsDefault, ...options};

或使用Object.assign

options = Object.assign({}, optionsDefault, options);

这就是让我感到奇怪的承诺。


问题答案:

这并不一定是详尽无遗的。

传播语法

options = {...optionsDefault, ...options};

优点:

  • 如果编写代码以在没有本机支持的环境中执行,则可以只编译此语法(与使用polyfill相对)。(例如,使用Babel。)

  • 不太冗长。

缺点:

  • 最初编写此答案时,这只是一个建议,而不是标准化的。使用建议时,请考虑一下如果现在使用它编写代码会做什么,并且在朝着标准化的方向发展时,它不会变得标准化或更改。此后已在ES2018中标准化。

  • 从字面上看,不是动态的。

Object.assign()

options = Object.assign({}, optionsDefault, options);

优点:

  • 标准化。

  • 动态。例:

    var sources = [{a: "A"}, {b: "B"}, {c: "C"}];
    

    options = Object.assign.apply(Object, [{}].concat(sources));
    // or
    options = Object.assign({}, …sources);

缺点:

  • 更详细。
  • 如果创作代码以在没有本机支持的环境中执行,则需要polyfill。

这就是让我感到奇怪的承诺。

这与您的要求没有直接关系。该代码未使用Object.assign(),它正在使用object-assign执行相同操作的用户代码()。他们似乎正在使用Babel编译该代码(并将其与Webpack捆绑在一起),这就是我所说的:您可以编译的语法。他们显然更喜欢将其包含object-assign在其构建中作为依赖项。



 类似资料:
  • 问题内容: 我正在考虑我的应用程序的解决方案。这是一种情况:我有一个类,该类的方法将ObjectA作为输入参数并调用几个小方法,这些方法中的每个方法都需要ObjectA的某些部分(它们不重叠,即需求和,需求等等)。 …)现在的问题是:鉴于一般的良好代码实践和性能,将ObjectA传递给这些方法中的每一个方法更好,以便它们可以自己提取所需的值,还是仅传递它们的值更好?我的意思是: 要么 感谢您的任何

  • 问题内容: 我有一个问题,为什么节点v6.7无法运行此代码: 有人知道为什么会这样吗?我以为v6支持对象传播。但是我想不是吗?这是我看到的错误: 问题答案: 看起来ES6传播运算符仅适用于数组和可迭代对象。它是专为 无法正常工作 的对象:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_o

  • 我想知道是否有一个衬里可能像这样 我只是检查名字、姓氏等是否为空。如果我有几个这样的字段呢? 因此,如果我写入,我不想用空值更新任何字段 如果我的字段为空,是否有任何可能的替代方案可以告诉object spread或任何其他内容不要更新?

  • 问题内容: 问题在于确定以下符号之间的权衡: 基于JSON : 基于数组 : 关于同一问题的这篇文章,我已经决定(在前端)使用JSON对象表示法而不是对象数组,因为它符合我的要求,更好的性能和更少的浏览器代码。 但是问题在于列表本身不是静态的。我的意思是,该列表正在生成,即从DB(NoSQL)获取/存储,并通过服务器上的JavaAPI为新条目创建。我无法决定在后端应使用哪种表示法(最终也会影响UI

  • type String - blob. blobUUID String - 要上传的blob数据的UUID。

  • 所称的刀是: 我希望服务类中的方法在事务中运行,并在方法出现异常时回滚所有内容。但这不是在事务中运行的。 如果我将添加到DAO方法中,那么它看起来就像是在单独的事务中运行的。这是正确的吗?