在默认情况下将可枚举设置为 false 的 JS 中创建对象属性的其他方法是什么

What are other ways of creating object properties in JS with enumerable set to false by default?

本文关键字:JS 创建对象 其他 是什么 方法 属性 false 情况下 默认 枚举 设置      更新时间:2023-09-26

可枚举属性是其内部 [[Enumerable]] 标志设置为 true 的属性,这是通过简单赋值或通过属性初始值设定项创建的属性的默认值(通过 Object.defineProperty 定义的属性,并且此类默认值 [[Enumerable]] 为 false(。

var person = new Object();
//person = {"hair": "red", "eyes": "blue"};    
Object.defineProperty(person, "gender", {value: "male"});
Object.defineProperty(person, "name", {value: "Joe"});
for (var prop in person) {
    console.log(prop + " = " + person[prop]);
}

这将不产生任何内容,甚至不会产生错误,因为枚举设置为 false。取消注释简单的赋值并注释掉定义属性,它将产生

"hair": "red", "eyes": "blue".

MDN说"...等等",对我来说,Object.defineProperty 是创建默认情况下将 enumarable 设置为 false 的属性的唯一方法。

附言。我可能应该重新措辞一下。当我做新的 Object(( 时,它的可枚举属性默认设置为 false,所以当我做 Object.defineProperty(( 时,我没有碰 enumerable 属性,它仍然是假的。但是,当您随后执行简单分配时,枚举将设置为 true。

据我所知,使用 Object.defineProperty 是修改可枚举标志的唯一方法。在 ES5 之前,我们没有这样的机制。