Allerdings sollte jeder aufpassen, wenn er eine for..-Schleife verwendet. Warum sagen Sie das? Hört mir alle zu...
Javascript bietet eine spezielle Schleife (d. h. eine for..in-Schleife), die zum Iterieren der Eigenschaften eines Objekts oder eines Arrays verwendet wird Jedes Element, der Schleifenzähler in der for...in-Schleife, ist eine Zeichenfolge, keine Zahl. Es enthält den Namen der aktuellen Eigenschaft oder den Index des aktuellen Array-Elements.
Fall 1:
Das Ausführungsergebnis ist: NameAlter
//使用for..in循环遍历对象属性 varperson={ name: "Admin", age: 21, address:"shandong" }; for(vari in person){ console.log(i); }
Adresse
Beim Durchlaufen eines Objekts wird die Variable i verwendet, die der Schleifenzähler ist , ist der Objektattributname
Ausführungsergebnis: 0 1//使用for..in循环遍历数组 vararray = ["admin","manager","db"] for(vari in array){ console.log(i); }
2
Beim Durchlaufen eines Arrays ist die Variable i, die der Schleifenzähler ist, der Index von das aktuelle Array-Element
Fall 2:
Es scheint jedoch, dass das for .. in-Schleife ist jetzt ziemlich nützlich, aber seien Sie nicht zu früh glücklich:
Laufendes Ergebnis:admin Manager
var array =["admin","manager","db"]; //给Array的原型添加一个name属性 Array.prototype.name= "zhangsan"; for(var i in array){ alert(array[i]); }
db
zhangsan
Wow, ein Wunder. Okay, warum ist ein Zhangsan aus dem Nichts aufgetaucht?
Nun wollen wir sehen, was passiert, wenn wir eine for-Schleife verwenden ?
Laufergebnis: admin Managervararray = ["admin","manager","db"]; //给Array的原型添加一个name属性 Array.prototype.name = "zhangsan"; for(var i =0 ; i<array.length; i++){ alert(array[i]); };
db
Oh, jetzt verstehe ich, dass die for..in-Schleife die Methoden und Attribute im Prototyp eines bestimmten Typs durchläuft, sodass dies zu unerwarteten Ereignissen führen kann Fehler in Ihrem Code. Um dieses Problem zu vermeiden, können wir die Methode hasOwnProperty() des Objekts verwenden, um dieses Problem zu vermeiden. Wenn die Eigenschaften oder Methoden des Objekts nicht geerbt sind, gibt die Methode hasOwnProperty() true zurück. Das heißt, die Prüfung betrifft hier keine Eigenschaften und Methoden, die von anderen Objekten geerbt wurden, sondern nur Eigenschaften, die direkt im jeweiligen Objekt selbst erstellt wurden.
Fall drei:
Laufergebnis: admin Managervararray = ["admin","manager","db"]; Array.prototype.name= "zhangshan"; for(vari in array){ //如果不是该对象自身直接创建的属性(也就是该属//性是原型中的属性),则跳过显示 if(!array.hasOwnProperty(i)){ continue; } alert(array[i]); }
db
Alles ist wieder intakt, hey, ich weiß nicht, Genossen, seht mal. Wie fühlst du dich? Hast du Lust, „die Wolken wegzuschieben und den sonnigen Himmel zu sehen“?