考虑到基本的使用场景,做
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 之前的应用程序中回退到原版吗
请注意,完全支持definePropertyES5,因此除非您需要考虑 ES5 之前的(旧 IE)浏览器,否则您根本不会在意。