考虑使用的基本情况,请执行
foo.bar = 'baz';
和
Object.defineProperty(foo, 'bar', {
value: 'baz',
configurable: true,
enumerable: true,
writable: true
});
在支持的浏览器中表现完全相同?
我们可以在ES6之前的应用程序中回归到vanilla,只是因为它们有良好的语法或混合它们而没有任何副作用吗?
答案 0 :(得分:3)
是的,它们在
时的行为相同bar
中没有foo
属性(甚至不是继承的属性),因此创建了新属性,或bar
属性,writable
和configurable
属性设置为true
然而,如果两者都没有给出,那么两者确实会产生略微不同的结果。
defineProperty
不考虑继承的属性及其描述符definePropery
将使用数据描述符覆盖该属性(或者如果它失败)是一个自己的,不可配置的))writable
为false,则赋值将失败;如果为true,则创建新的属性,如defineProperty
始终为writable
为false时分配将失败,如果为true,则分配新值;如果defineOwnProperty
为false,则configurable
将失败并以其他方式覆盖属性。考虑使用的基本情况
如果通过"基本用法"你的意思是没有使用花哨的属性属性,那么是的,它们是等价的。然而,您应该只使用简单的分配,因为它们更容易阅读并且执行起来更快。
我们能否在ES6之前的应用程序中回归到香草
请注意,defineProperty
完全支持ES5,因此,除非您需要考虑ES5之前的旧浏览器,否则您根本不在乎。