Heim  >  Artikel  >  Web-Frontend  >  JavaScript-Serie für Fortgeschrittene – for in-Schleife

JavaScript-Serie für Fortgeschrittene – for in-Schleife

黄舟
黄舟Original
2017-02-08 09:31:141120Durchsuche

Verwenden Sie hasOwnProperty zum Filtern

Zusammenfassung

Wie der in-Operator durchläuft auch die for in-Schleife bei der Suche nach Objekteigenschaften alle Eigenschaften in der Prototypenkette.

// 修改 Object.prototype
Object.prototype.bar = 1;

var foo = {moo: 2};
for(var i in foo) {
    console.log(i); // 输出两个属性:bar 和 moo
}

Da es unmöglich ist, das Verhalten von for an sich zu ändern, ist es notwendig, die Eigenschaften herauszufiltern, die nicht im Schleifenkörper erscheinen sollen. Dies kann über die Funktion hasOwnProperty erfolgen der Object.prototype-Prototyp.

Hinweis: Die for in-Schleife durchläuft keine Eigenschaften, deren Aufzählungswert auf „false“ gesetzt ist, wie z. B. die Längeneigenschaft eines Arrays.

Verwenden Sie hasOwnProperty zum Filtern

// foo 变量是上例中的
for(var i in foo) {
    if (foo.hasOwnProperty(i)) {
        console.log(i);
    }
}

Diese Version des Codes ist die einzig richtige Art, ihn zu schreiben. Da wir hasOwnProperty verwendet haben, wird dieses Mal nur moo ausgegeben. Wenn hasOwnProperty nicht verwendet wird, kann dieser Code beim Erweitern nativer Objektprototypen (z. B. Object.prototype) beschädigt werden.

Eine weit verbreitete Klassenbibliothek Prototype erweitert native JavaScript-Objekte. Wenn diese Klassenbibliothek in die Seite eingebunden wird, kommt es daher unweigerlich zu Problemen in For-In-Schleifen, die keine hasOwnProperty-Filterung verwenden.


Hinweis: Da for in immer die gesamte Prototypenkette durchläuft, wird die Leistung beeinträchtigt, wenn die Vererbungsebene eines Objekts zu tief ist.

Zusammenfassung

Es wird empfohlen, immer hasOwnProperty zu verwenden, keine Annahmen über die Umgebung zu treffen, in der der Code ausgeführt wird, und nicht davon auszugehen, ob das native Objekt erweitert wurde.

Das Obige ist der Inhalt der JavaScript-Fortgeschrittenenserie – für weitere verwandte Inhalte beachten Sie bitte die chinesische PHP-Website (www.php.cn)!


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