Zusammenfassung der einundfünfzigsten Woche – Objektdurchlaufmethode

<= zurück


Methoden zum Iterieren über Objekte

Durchlaufen Sie den Schlüsselwert im Objekt.
Die Eigenschaften im Objekt sind in zwei Typen unterteilt, String und Symbol.
Wenn wir andere Typen als Strings und Symbole verwenden, werden sie alle als Strings enden.

var objProp = {}
var obj = {
  [objProp]: 'obj'
}
console.log(obj);//{ '[object Object]': 'obj' }

  1. Erstellen Sie Objekte mit verschiedenen Arten von Parametern
var obj = {
  str: 'str-value',
  [Symbol()]: 'Symbol()-value'
}
// defineProperty方法可以直接再一个对象上定义一个新的属性,或者修改一个对象的现有属性,并返回此对象。
//定义一个不可枚举属性
Object.defineProperty(obj, 'unenum', {
  value: '不可枚举unenum',
  writeable: true,//是否可以被赋值运算符改变
  enumerable: false,//是否出现在枚举属性中
  configurable: true//是否可以改变和删除
})
//定义一个不可枚举属性
Object.defineProperty(obj, Symbol('unenum'), {
    value: '不可枚举Symbol("unenum")-value',
    writeable: true,
    enumerable: false,
    configurable: true
})
//在对象的原型上添加属性
Object.setPrototypeOf(obj, { foo: '原型bar-value', [Symbol('foo')]: '原型Symbol("foo")-value' })

Die obj-Codeeingabe obj lautet:
[Externer Link Bildübertragung fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Leeching-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-Ur589o1E-1661955777441)(…/image/Interview- index-1.png)] ;

  1. Object.keys()/Ojbect.values()/Object.entries()
    Diese drei Methoden können nur auf die Sammlung von Eigenschaften des Objekts zugreifen. Behandelt aber nur die aufzählbaren String-Eigenschaften von obj selbst.
    Object.keys() erhält den Schlüsselwert, Ojbect.values() erhält den Wertwert und Object.entries() erhält den Schlüsselwertwert.
console.log(Object.keys(obj));//[ 'str' ]
console.log(Object.values(obj));//[ 'str-value' ]
console.log(Object.entries(obj));//[ [ 'str', 'str-value' ] ]

  1. Object.getOwnPropertyNames()
    kann die Eigenschaftssammlung des Objekts selbst abrufen und die Schlüsselwerte aller Zeichenfolgeneigenschaften von sich selbst verarbeiten, einschließlich nicht aufzählbarer Eigenschaften, kann jedoch keine Symboleigenschaften und Eigenschaften über dem Prototyp verarbeiten.
console.log(Object.getOwnPropertyNames(obj));//[ 'str', 'unenum' ]

  1. Object.getOwnPropertySymbols()
    kann die Eigenschaftssammlung des Objekts selbst abrufen und die Schlüsselwerte aller Symboleigenschaften von sich selbst verarbeiten, einschließlich nicht aufzählbarer Eigenschaften, kann jedoch keine Zeichenfolgeneigenschaften und Eigenschaften über dem Prototyp verarbeiten.
console.log(Object.getOwnPropertySymbols(obj));//[ Symbol(), Symbol(unenum) ]

  1. Reflect.ownKeys(obj)
    kann als Object.getOwnPropertyNames()+Object.getOwnPropertySymbols() angesehen werden, das die Schlüsselwerte aller seiner eigenen String-Eigenschaften und Symbol-Eigenschaften zurückgibt, einschließlich nicht aufzählbarer, aber die Eigenschaften nicht zurückgeben kann über dem Prototyp.
console.log(Reflect.ownKeys(obj));//[ 'str', 'unenum', Symbol(), Symbol(unenum) ]

  1. for...in
    gibt die Schlüsselwerte aller aufzählbaren String-Eigenschaften auf sich selbst und seiner Prototypkette zurück, mit Ausnahme der Schlüsselwerte von nicht aufzählbaren und Symbol-Eigenschaften.
for(let prop in obj){
  console.log(prop);//str -> foo
}

Object.keys()/Ojbect.values()/Object.entries() kann durch die gemeinsame Verwendung von for...in und hasOwnProperty realisiert werden
hasOwnProperty soll beurteilen, ob das Objekt selbst eine spezifizierte Eigenschaft hat, d.h. den spezifizierten Schlüssel Wert.

for (let prop in obj) {
  if (obj.hasOwnProperty(prop)) {
    //{ key: 'str', value: 'str-value', pair: [ 'str', 'str-value' ] }
    console.log({ key: prop, value: obj[prop], pair: [prop, obj[prop]] })
  }
}

Guess you like

Origin blog.csdn.net/qq_51965698/article/details/126633507