Javascript 在默认情况下enumerable设置为false的JS中创建对象属性的其他方法有哪些?

Javascript 在默认情况下enumerable设置为false的JS中创建对象属性的其他方法有哪些?,javascript,object,properties,enumerable,Javascript,Object,Properties,Enumerable,可枚举属性是那些其内部[[Enumerable]]标志设置为true的属性,这是通过简单赋值或属性初始值设定项创建的属性的默认值(通过Object.defineProperty定义的属性,以及此类默认[[Enumerable]]设置为false) 这将不会产生任何结果,甚至不会产生错误,因为枚举数被设置为false。取消对简单赋值的注释并注释掉defineProperty,它将生成 “头发”:“红色”,“眼睛”:“蓝色”。 MDN说“…以及诸如此类的”,对我来说Object.defineProp

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

这将不会产生任何结果,甚至不会产生错误,因为枚举数被设置为false。取消对简单赋值的注释并注释掉defineProperty,它将生成

“头发”:“红色”,“眼睛”:“蓝色”。

MDN说“…以及诸如此类的”,对我来说Object.defineProperty是在默认情况下将枚举数设置为false的情况下创建属性的唯一方法


顺便说一句,我应该再重复一下。当我执行new Object()时,其enumerable属性默认设置为false,因此当我执行Object.defineProperty()时,我没有触及enumerable属性,它仍然为false。但是,当您随后执行简单赋值时,可枚举项被设置为true。

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

Object.defineProperty()可能是修改可枚举标志的唯一方法。创建新对象()时,其可枚举属性将设置为false。因此,当我定义属性()时,我没有触及枚举数,它们仍然是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]);
}