prefacio
JavaScript Object adquirió más métodos de propiedad, pero cada método son diferentes escenarios, con el fin de explicar la situación, se supone que la siguiente
let c = Symbol.for('这是实例上的属性');
let e = Symbol.for('这是原型上的属性');
let obj = {a:1,b:2,[c]:5};
Reflect.setPrototypeOf(obj,{
fn:2,
[e]:8
})
Object.defineProperties(obj,{
d:{
value:6,
enumerable:false
}
})
Object.keys ()
Object.keys(obj).forEach(prop=>{
console.log(prop);
})
//a
//b
Obtiene un objeto en sí mismo atributo de instancia, pero no incluye una clave de símbolos
Object.getOwnPropertySymbols ()
console.log('-----------------获取symbol键')
Object.getOwnPropertySymbols(obj).forEach(prop=>{
console.log(prop);
})
// -----------------
// Symbol(这是实例上的属性)
Para la adquisición de teclas de símbolos, ni la obtención de prototipos
Object.getOwnPropertyNames ()
console.log('-----------------不管枚举或者不可枚举都会获取')
Object.getOwnPropertyNames(obj).forEach(prop=>{
console.log(prop);
})
//a
//b
//d
Sea o no numerable recibirá, todavía no incluye teclas de símbolos
for ... in
for(const prop in obj){
console.log(prop);
}
//a
//b
//fn
La obtención de la propiedad seguirá recibiendo el prototipo, por lo que utilizar el método iterativo requiere una cuidadosa si se requiere propiedades en el prototipo, usando el método iterativo puede agregar una instancia de objeto hasOwnProperty
juez
for(const prop in obj){
if(obj.hasOwnProperty(prop)){
console.log(prop);
}
}
//a
//b