考虑到基本的使用场景,做
foo.bar = 'baz';
和
Object.defineProperty(foo, 'bar', {
value: 'baz',
configurable: true,
enumerable: true,
writable: true
});
在支持的浏览器中表现完全相同?
我们是否可以仅仅因为有利的语法而在 ES6 之前的应用程序中回退到 vanilla,或者将它们混合使用而没有任何副作用?
考虑到基本的使用场景,做
foo.bar = 'baz';
和
Object.defineProperty(foo, 'bar', {
value: 'baz',
configurable: true,
enumerable: true,
writable: true
});
在支持的浏览器中表现完全相同?
我们是否可以仅仅因为有利的语法而在 ES6 之前的应用程序中回退到 vanilla,或者将它们混合使用而没有任何副作用?
是的,它们的行为相同
bar
属性foo
(甚至没有继承的属性),因此创建了一个新属性,或者bar
属性将writable
和configurable
属性设置为true
但是,如果两者都没有给出,则两者确实会产生略有不同的结果。
defineProperty
不考虑继承的属性及其描述符definePropery
将使用数据描述符覆盖该属性(或者如果它是自己的、不可配置的则失败)writable
为 true,则创建新的自己的属性,就像defineProperty
往常一样writable
为 true,则设置新值,而如果为 false,defineOwnProperty
则将失败configurable
,否则覆盖属性。考虑基本使用场景
如果“基本用法”是指不使用花哨的属性属性,那么是的,它们是等价的。然而你应该只使用简单的分配,因为它们更容易阅读并且执行起来更快。
我们可以在 ES6 之前的应用程序中回退到原版吗
请注意,完全支持defineProperty
ES5,因此除非您需要考虑 ES5 之前的(旧 IE)浏览器,否则您根本不会在意。