Object.assign 和 just as assign 之间的区别
Difference between Object.assign and just assign
我想知道这两者之间的区别:
Object.assign(otherObject, {
someNewProperty: ''
});
和
otherObject.someNewProperty = '';
而且..哪一个更快?
谢谢。
Object.assign() 方法用于复制所有 从一个或多个源对象到目标的可枚举自己的属性 对象。它将返回目标对象。
而otherObject.someNewProperty = '';
是一种直接为对象的某些属性赋值的方法。
显然,Object.assign
模式要慢得多:jsperf.com/assign-vs-equals
对于单个属性,直接赋值 ( otherObject.someNewProperty = ''
) 快两倍,但对于多个值 - 时间会增长。每个属性 + 5% 到 10%。此外,代码明智的Object.assign
对于多个选项更好。
Object.assign(otherObject, {
prop1: '',
prop2: '',
prop3: '',
...
});
与
otherObject.prop1 = '';
otherObject.prop2 = '';
otherObject.prop3 = '';
...
您只需在Chrome开发工具中运行"配置文件"选项卡并运行一些测试即可。
Object.assign()
是一个非常通用的函数,旨在进行复杂的对象组合。
属性点表示法是将单个值分配给单个属性的直接方法。
关于哪个更快,考虑到这些不是等价的,这是无关紧要的,正如我一直以来最喜欢的帖子之一所指出的那样,"问哪一个跑得更快可能是不可能的"。
关于直接赋值和使用 Object.asassign 之间的差异,这里还有一件重要的事情要展示(实际上,不完全是区别,但需要注意的重要事情)。
如果你有一个对象被分配给 JS 中的另一个变量,如下所示:
const a = { a: 1 }
const b = a
然后,您决定使用 Object.assign 来更改 a
中的值并分配给另一个变量(d
),您也将更改 b
中的值(即使您没有将 Object.assign 返回分配给a
,在本例中让我们分配给一个新的变量 d
)。
const d = Object.assign(a, { a: 2 })
console.log(a) // { a: 2 }
console.log(b) // { a: 2 }
console.log(d) // { a: 2 }
基本上,重要的是要知道 Object.assign 将改变目标对象以及指向它的所有变量。
现在,如果您直接使用 d
赋值,它不会更改 a
中的值(并且在b
也不会更改)。
const d = { ...a, ...{ a: 2 }}
console.log(a) // { a: 1 }
console.log(b) // { a: 1 }
console.log(d) // { a: 2 }
这实际上是一个很好的问题:我们刚刚发现了一个错误,我们将使用 Object.assign 将属性分配给文件。
const file = new File(["foo"], "foo.txt", {
type: "text/plain",
});
file.name='test'; // does not update the readonly value but doesn't return an error
Object.assign(file,{name:'test'}); // error: 'Cannot set property name of #<File> which has only a getter'
- 全局变量和全局对象的属性之间有什么区别吗
- JavaScript中的函数和对象之间没有区别吗?
- 在ember/handlers中使用value和valueBinding有什么区别
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- javascript函数的:和=之间的区别
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 函数中this和var之间的区别
- “util.inherits”和在NodeJS中扩展原型之间的区别
- Math.min()和Math.max()之间有什么区别?在Javascript中
- angularjs中的ng网格和ui网格有什么区别
- 使用大括号和不使用bracs调用函数的区别
- webpack开发模式和生产构建模式之间有什么区别
- 使用Rhino和ASE执行Javascript的区别
- 如何使用object.assign()从其他对象引用基本对象属性
- servlet和代理servlet之间的区别
- Lodash - .extend() / .assign() 和 .merge() 之间的区别
- Object.assign 和 just as assign 之间的区别
- 使用 Object.create() 和 Object.assign() 创建对象有什么区别?
- 使用Object.assign和class/extends有什么区别