【问题标题】:Experimenting JavaScript Properties Attribute defaults试验 JavaScript Properties 属性默认值
【发布时间】:2012-10-09 08:47:34
【问题描述】:

在阅读一本关于 JavaScript 的书时,我读到了该书

“直接在对象上定义”时,Data Properties 的所有属性默认为 true

然后经过一些描述,它又说

“当您使用 Object.defineProperty()” 时,可配置、可枚举和 除非另有说明,否则可写默认为 false。

我猜,在第一条语句中“直接在对象上定义”是指使用点运算符或对象字面量表示法,如下所示:

var obj = new Object();
obj.name = "Mahesh";

但是,在通过任一方法将属性添加到对象之后,是否有任何方法可以试验检查这些属性已设置为什么?

【问题讨论】:

  • console.log(obj) 怎么样?在 Chrome 控制台或 FireBug 中,您应该能够展开该节点并查看其所有属性的设置。
  • 至少有Object.propertyIsEnumerable。我不确定configurablewritable
  • @bfavaretto 你说得对,使用 Object.propertyIsEnumerable() 至少可以测试我对 [[enumerable]] 的理解,它的行为与书中所说的完全相同
  • @MicahHenning 我认为我们只能在 Chrome 控制台窗口中看到对象的属性,但看不到 property attributes

标签: javascript


【解决方案1】:

你可以使用getOwnPropertyDescriptor:

> var desc = Object.getOwnPropertyDescriptor(obj, 'name');
{"value":"Mahesh","writable":true,"enumerable":true,"configurable":true}

desc 将包含标志configurableenumerable。如果属性是数据描述符(不是getset),desc 还将包含value 和标志writable。如果属性是访问器描述符,desc 还将包含 getset 方法。

【讨论】:

  • 很高兴知道。 defineProperty 上的 MDN 页面缺少指向该页面的链接。
猜你喜欢
  • 2021-09-20
  • 1970-01-01
  • 2023-03-18
  • 2011-12-16
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 2010-10-16
相关资源
最近更新 更多