Heim >Web-Frontend >js-Tutorial >Fallstricke von for..in-Schleifen in JavaScript

Fallstricke von for..in-Schleifen in JavaScript

高洛峰
高洛峰Original
2016-11-28 13:33:391299Durchsuche

                                                                                                                                                                                                                                         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:

Name

Alter

               //使用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

Manager

               vararray = ["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

Manager

               vararray = ["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“?
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