Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung der 5 Schleifendurchlaufmethoden von Javascript-Objekten

Detaillierte Erläuterung der 5 Schleifendurchlaufmethoden von Javascript-Objekten

青灯夜游
青灯夜游Original
2022-08-04 17:28:2735647Durchsuche

Wie durchläuft man Javascript-Objekte? Im folgenden Artikel werden fünf JS-Objektdurchquerungsmethoden im Detail vorgestellt und diese fünf Methoden werden hoffentlich hilfreich sein!

Detaillierte Erläuterung der 5 Schleifendurchlaufmethoden von Javascript-Objekten

1. Objektdurchquerungsmethode

  • für ... infor ... in

  • Object.keys(), Object.values(), Object.entries()

  • Object.getOwnPropertyNames()

  • Object.getOwnPropertySymbols()

  • Reflect.ownKeys()

二、对象属性遍历次序规则

以上5种方法遍历对象的属性时都遵守同样的属性遍历次序规则

  • 属性名为数值,按照数值升序排序

  • 属性名为字符串,按照生成时间升序排序

  • 属性名为Symbol,按照生成时间升序排序

三、遍历方法详解

1. for in

for…in 主要用于循环对象属性。循环中的代码每执行一次,就会对对象的属性进行一次操作。其语法如下:

for (var in object) {
 执行的代码块
}

其中两个参数:

  • var:必须。指定的变量可以是数组元素,也可以是对象的属性。

  • object:必须。指定迭代的的对象。

var obj = {a: 1, b: 2, c: 3}; 
 
for (var i in obj) { 
    console.log('键名:', i); 
    console.log('键值:', obj[i]); 
}

输出结果:

键名:a
键值:1
键名:b
键值:2
键名:c
键值:3

注意:

  • for in 方法不仅会遍历当前的对象所有的可枚举属性,还会遍历其原型链上的属性。

2. Object.keys()、Object.values()、Object.entries()

这三个方法都用来遍历对象,它会返回一个由给定对象的自身可枚举属性(不含继承的和Symbol属性)组成的数组,数组元素的排列顺序和正常循环遍历该对象时返回的顺序一致,这个三个元素返回的值分别如下:

  • Object.keys():返回包含对象键名的数组;

  • Object.values():返回包含对象键值的数组;

  • Object.entries():返回包含对象键名和键值的数组。

let obj = { 
  id: 1, 
  name: 'hello', 
  age: 18 
};
console.log(Object.keys(obj));   // 输出结果: ['id', 'name', 'age']
console.log(Object.values(obj)); // 输出结果: [1, 'hello', 18]
console.log(Object.entries(obj));   // 输出结果: [['id', 1], ['name', 'hello'], ['age', 18]

注意

  • Object.keys()方法返回的数组中的值都是字符串,也就是说不是字符串的key值会转化为字符串。

  • 结果数组中的属性值都是对象本身可枚举的属性,不包括继承来的属性。

3. Object.getOwnPropertyNames()

Object.getOwnPropertyNames()方法与Object.keys()类似,也是接受一个对象作为参数,返回一个数组,包含了该对象自身的所有属性名。但它能返回不可枚举的属性。

let a = ['Hello', 'World'];
 
Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]

这两个方法都可以用来计算对象中属性的个数:

var obj = { 0: "a", 1: "b", 2: "c"};
Object.getOwnPropertyNames(obj) // ["0", "1", "2"]
Object.keys(obj).length // 3
Object.getOwnPropertyNames(obj).length // 3

4. Object.getOwnPropertySymbols()

Object.getOwnPropertySymbols() 方法返回对象自身的 Symbol 属性组成的数组,不包括字符串属性:

let obj = {a: 1}
 
// 给对象添加一个不可枚举的 Symbol 属性
Object.defineProperties(obj, {
 [Symbol('baz')]: {
  value: 'Symbol baz',
  enumerable: false
 }
})
 
// 给对象添加一个可枚举的 Symbol 属性
obj[Symbol('foo')] = 'Symbol foo'
 
Object.getOwnPropertySymbols(obj).forEach((key) => {
 console.log(obj[key]) 
})
 
// 输出结果:Symbol baz Symbol foo

5. Reflect.ownKeys()

Reflect.ownKeys() 返回一个数组,包含对象自身的所有属性。它和Object.keys()类似,Object.keys()返回属性key,但不包括不可枚举的属性,而Reflect.ownKeys()会返回所有属性key:

var obj = {
 a: 1,
 b: 2
}
Object.defineProperty(obj, 'method', {
 value: function () {
     alert("Non enumerable property")
 },
 enumerable: false
})
 
console.log(Object.keys(obj))
// ["a", "b"]
console.log(Reflect.ownKeys(obj))
// ["a", "b", "method"]

注意:

  • Object.keys() :相当于返回对象属性数组;

  • Reflect.ownKeys() :相当于 Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj)

Object.keys(), Object.values(), Object.entries( )

Object.getOwnPropertyNames()Wert der Wert In aufsteigender Reihenfolge sortierenDer Attributname ist , Sortieren nach In aufsteigender ReihenfolgeDer Attributname ist , Sortieren nach Aufsteigende Reihenfolge1. für inrrreee
var: erforderlich. Die angegebene Variable kann ein Array-Element oder eine Objekteigenschaft sein. Objekt: erforderlich. Gibt das Objekt an, über das iteriert werden soll. rrreee
for in-Methode durchläuft nicht nur alle aufzählbaren Eigenschaften des aktuellen Objekts, sondern auch die Eigenschaften seiner Prototypenkette. 2. Object.keys(), Object.values(), Object.entries()Verwenden Sie alle drei Methoden zum Durchlaufen Das Objekt gibt ein Array zurück, das aus den aufzählbaren Eigenschaften des angegebenen Objekts besteht (mit Ausnahme der geerbten Eigenschaften und Symboleigenschaften). Die Reihenfolge der Array-Elemente stimmt mit der Reihenfolge überein, die beim normalen Durchlaufen des Objekts zurückgegeben wird für jedes Element lauten wie folgt: Object.values(): gibt ein Array zurück, das den Objektschlüsselwert enthält; rrreee
    Die Werte im von der Object.keys()-Methode zurückgegebenen Array sind alle Zeichenfolgen, was bedeutet, dass Schlüsselwerte, die keine Zeichenfolgen sind, in Zeichenfolgen konvertiert werden. Die Attributwerte im Ergebnisarray sind alle

    3. Die Methode Object.getOwnPropertyNames()

    nicht aufzählbare Eigenschaften zurückgeben. rrreeerrreee4. Object.getOwnPropertySymbols()
    Object.getOwnPropertySymbols() Reflect.ownKeys() 2. Regeln für die Durchlaufreihenfolge von Objektattributen Die oben genannten fünf Methoden befolgen beim Durchlaufen der Eigenschaften eines Objekts alle die gleichen Regeln für die Durchlaufreihenfolge von Attributen. Der Attributname lautet entsprechend
    StringGenerierungszeit SymbolGenerationszeit
    3. Detaillierte Erläuterung der Traversal-Methode
    für…in ist Wird hauptsächlich zum Schleifen von Objekteigenschaften verwendet. Jedes Mal, wenn der Code in der Schleife ausgeführt wird, werden die Eigenschaften des Objekts bearbeitet. Die Syntax lautet wie folgt: Zwei Parameter:
    rrreee
    Ausgabeergebnis:
    Hinweis:
      Object.keys(): gibt ein Array zurück, das den Objektschlüsselnamen enthält;
      Object.entries(): Gibt ein Array zurück, das Objektschlüsselnamen und Schlüsselwerte enthält. Hinweis
      aufzählbaren Attribute
      des Objekts selbst, mit Ausnahme der geerbten Attribute.
      Object.getOwnPropertyNames() ähnelt der Methode Object.keys() und akzeptiert auch eine Objekt Gibt als Parameter ein Array zurück, das alle Eigenschaftsnamen des Objekts selbst enthält. Aber es kann Beide Methoden können verwendet werden, um die Anzahl der Eigenschaften in einem Objekt zu zählen:

      Die Methode Object.getOwnPropertySymbols() gibt ein Array von Symboleigenschaften des Objekts selbst zurück, ausgenommen String-Eigenschaften: rrreee5 ()

      🎜🎜Reflect.ownKeys() gibt ein Array zurück, das alle Eigenschaften des Objekts selbst enthält. Es ähnelt Object.keys(). Object.keys() gibt Eigenschaftsschlüssel zurück, enthält jedoch keine nicht aufzählbaren Eigenschaften, während Reflect.ownKeys() alle Eigenschaftsschlüssel zurückgibt: 🎜rrreee🎜Hinweis: 🎜
        🎜🎜 Object.keys(): Entspricht der Rückgabe eines Arrays von Objekteigenschaften; 🎜🎜🎜🎜Reflect.ownKeys(): Entspricht Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj). 🎜🎜 4. Vergleich der Durchlaufmethoden 🎜Symboltyp🎜🎜🎜 🎜🎜🎜für ... in🎜🎜selbst🎜🎜erben🎜🎜ja🎜🎜ja🎜🎜nein🎜🎜enthält nicht🎜🎜🎜🎜Object.keys()🎜🎜selbst🎜🎜🎜 🎜🎜ja🎜🎜nein 🎜 🎜Nr 🎜Object.getOwnPropertySymbols() 🎜🎜Self🎜🎜🎜 🎜🎜Nein🎜🎜Nein 🎜🎜 ist 🎜🎜 alle Symboleigenschaften 🎜🎜🎜🎜Reflect.ownKeys()🎜🎜 selbst 🎜🎜🎜🎜🎜 ist 🎜🎜 nein 🎜🎜 ist 🎜 enthält 🎜🎜🎜🎜 🎜[Verwandte Empfehlungen: 🎜Javascript-Lern-Tutorial🎜🎜 】🎜🎜

      Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der 5 Schleifendurchlaufmethoden von Javascript-Objekten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

      Stellungnahme:
      Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn