Heim Web-Frontend js-Tutorial Javascript中的for in循环和hasOwnProperty结合使用_javascript技巧

Javascript中的for in循环和hasOwnProperty结合使用_javascript技巧

May 16, 2016 pm 05:32 PM
for hasownproperty

与in操作符相比,for in 在循环对象的属性时也会遍历原型链,for in 不会读取不可枚举属性,如数组的length属性。 小结 当检测某个对象是否拥有某个属性时,hasOwnProperty 是唯一可以完成这一任务的方法,在 for in 循环时,建议增加 hasOwnProperty 进行判断,可以有效避免扩展本地原型而引起的错误。

与in操作符相比,for in 在循环对象的属性时也会遍历原型链,for in 不会读取不可枚举属性,如数组的length属性。

复制代码 代码如下:

// 扩展 Object.prototype
Object.prototype.bar = 1;
var foo = {moo: 2};
for(var i in foo) {
console.log(i); // 输出 bar 和 moo
}


我们不可能改变 for in 循环的行为,当需要对循环体内某些属性进行过滤时,可以利用Object.prototype的hasOwnProperty方法来完成。

提示:因为 for in 循环总是遍历整个原型链,所以当遍历多继承的对象时效率较低。

使用 hasOwnProperty 进行过滤

复制代码 代码如下:

// 仍旧针对上例的foo对象
for (var i in foo) {
if (foo.hasOwnProperty(i)) {
console.log(i);
}
}


例子中因为使用了hasOwnProperty,最终输出moo;如果忽略 hasOwnProperty ,代码将会输出非预期结果,因为本地原型(如Object.prototype)已经被扩展了。

Prototype框架就是扩展Javascript原始对象的一个类库,并被广泛使用,其缺点也很明显,当框架引入后,如果不使用 hasOwnProperty 进行过滤判断,输出结果保证不是你想要的。

最佳实践

推荐在 for in 时,总是使用 hasOwnProperty 进行判断,没人可以保证运行的代码环境是否被污染过。

hasOwnProperty
为了检查某个对象是否拥有不在原型链上的自定义属性,就有必要用到 hasOwnProperty 方法,任何一个对象都具有该方法,它继承自 Object.prototype。

提示:我们无法完全检测某个属性是否是undefined,因为属性有可能存在,但其值为undefined。hasOwnProperty 是Javascript中唯一一个可以处理对象属性而不遍历原型链的方法。

复制代码 代码如下:

// 扩展 Object.prototype
Object.prototype.bar = 1;
var foo = {goo: undefined};

foo.bar; // 1
'bar' in foo; // true

foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true


只有 hasOwnProperty 给出了正确的预期结果,当遍历对象的属性时这是很有必要的,没有其它办法来排除定义在对象原型链上的属性。

hasOwnProperty 作为属性

Javascript 并没有保护 hasOwnProperty 为关键字或保留字,因此,如果某个对象拥有同名的属性,就有必要利用扩展的 hasOwnProperty 来获取正确结果。

复制代码 代码如下:

var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
foo.hasOwnProperty('bar'); // 总是返回 false
// 使用另一个 hasOwnProperty 并将 this 设置为 foo 来调用它
{}.hasOwnProperty.call(foo, 'bar'); // true


小结
当检测某个对象是否拥有某个属性时,hasOwnProperty 是唯一可以完成这一任务的方法,在 for in 循环时,建议增加 hasOwnProperty 进行判断,可以有效避免扩展本地原型而引起的错误。
Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

17 Möglichkeiten, den Bluescreen „kernel_security_check_failure' zu beheben 17 Möglichkeiten, den Bluescreen „kernel_security_check_failure' zu beheben Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure (Kernel-Check-Fehler) ist eine relativ häufige Art von Stoppcode. Unabhängig vom Grund führt der Bluescreen-Fehler jedoch dazu, dass viele Benutzer diese Seite sorgfältig vorstellen. 17 Lösungen für den Bluescreen „kernel_security_check_failure“ Methode 1: Entfernen Sie alle externen Geräte Wenn ein externes Gerät, das Sie verwenden, nicht mit Ihrer Windows-Version kompatibel ist, kann der Bluescreen-Fehler „Kernelsecuritycheckfailure“ auftreten. Dazu müssen Sie alle externen Geräte trennen, bevor Sie versuchen, Ihren Computer neu zu starten.

Wie deinstalliere ich Skype for Business unter Win10? So deinstallieren Sie Skype vollständig auf Ihrem Computer Wie deinstalliere ich Skype for Business unter Win10? So deinstallieren Sie Skype vollständig auf Ihrem Computer Feb 13, 2024 pm 12:30 PM

Kann Win10 Skype deinstalliert werden? Diese Frage möchten viele Benutzer wissen, da viele Benutzer feststellen, dass diese Anwendung im Standardprogramm auf ihren Computern enthalten ist, und sie befürchten, dass das Löschen den Betrieb des Systems beeinträchtigt Diese Website hilft Benutzern. Schauen wir uns genauer an, wie Skype for Business unter Win10 deinstalliert wird. So deinstallieren Sie Skype for Business unter Win10 1. Klicken Sie auf dem Computerdesktop auf das Windows-Symbol und dann zum Aufrufen auf das Einstellungssymbol. 2. Klicken Sie auf „Übernehmen“. 3. Geben Sie „Skype“ in das Suchfeld ein und klicken Sie, um das gefundene Ergebnis auszuwählen. 4. Klicken Sie auf „Deinstallieren“. 5

Wie man for verwendet, um die Fakultät von n in JavaScript zu finden Wie man for verwendet, um die Fakultät von n in JavaScript zu finden Dec 08, 2021 pm 06:04 PM

So verwenden Sie for, um n Fakultäten zu finden: 1. Verwenden Sie die Anweisung „for (var i=1;i<=n;i++){}“, um den Schleifendurchlaufbereich auf „1~n“ zu steuern. 2. In der Schleife Körper, verwenden Sie „cj *=i“. Multiplizieren Sie die Zahlen von 1 bis n und weisen Sie das Produkt der Variablen cj 3 zu. Nach dem Ende der Schleife ist der Wert der Variablen cj die Fakultät von n und wird dann ausgegeben.

Was ist der Unterschied zwischen foreach und for-Schleife? Was ist der Unterschied zwischen foreach und for-Schleife? Jan 05, 2023 pm 04:26 PM

Unterschiede: 1. for durchläuft jedes Datenelement über den Index, während forEach die Datenelemente des Arrays über das zugrunde liegende JS-Programm durchläuft. 2. for kann die Ausführung der Schleife über das Schlüsselwort break beenden, forEach jedoch nicht . for kann die Ausführung der Schleife steuern, indem es den Wert der Schleifenvariablen steuert, forEach jedoch nicht. 4. for kann Schleifenvariablen außerhalb der Schleife aufrufen, forEach kann jedoch keine Schleifenvariablen außerhalb der Schleife aufrufen ist höher als forEach.

So verwenden Sie hasownproperty So verwenden Sie hasownproperty Dec 04, 2023 am 11:21 AM

hasOwnProperty ist eine Methode des in JavaScript integrierten Objektprototyps (Object.prototype), mit der überprüft wird, ob die eigenen Eigenschaften des Objekts die angegebene Eigenschaft enthalten und nicht die von seiner Prototypenkette geerbten Eigenschaften. Die grundlegende Syntax ist „obj.hasOwnProperty(prop)“.

Was sind die gängigen Flusskontrollstrukturen in Python? Was sind die gängigen Flusskontrollstrukturen in Python? Jan 20, 2024 am 08:17 AM

Was sind die gängigen Flusskontrollstrukturen in Python? In Python ist die Flusskontrollstruktur ein wichtiges Werkzeug zur Bestimmung der Ausführungsreihenfolge des Programms. Sie ermöglichen es uns, verschiedene Codeblöcke basierend auf unterschiedlichen Bedingungen auszuführen oder einen Codeblock wiederholt auszuführen. Im Folgenden werden gängige Prozesssteuerungsstrukturen in Python vorgestellt und entsprechende Codebeispiele bereitgestellt. Bedingte Anweisungen (if-else): Bedingte Anweisungen ermöglichen es uns, verschiedene Codeblöcke basierend auf unterschiedlichen Bedingungen auszuführen. Die grundlegende Syntax lautet: if Bedingung 1: #when Bedingung

Wie vermeide ich Ausnahmen in einfachen for-Schleifen in JAVA? Wie vermeide ich Ausnahmen in einfachen for-Schleifen in JAVA? Apr 26, 2023 pm 12:58 PM

Einleitung Bei der tatsächlichen Geschäftsprojektentwicklung sollte jeder mit dem Vorgang des Entfernens von Elementen, die die Bedingungen nicht erfüllen, aus einer bestimmten Liste vertraut sein, oder? Vielen Schülern fallen sofort viele Wege ein, um dies zu erreichen, aber sind alle Wege, die Ihnen einfallen, für Mensch und Tier harmlos? Viele scheinbar normale Vorgänge sind in Wirklichkeit Fallen, und viele Anfänger könnten in sie tappen, wenn sie nicht vorsichtig sind. Wenn beim Ausführen des Codes leider eine Ausnahme ausgelöst und ein Fehler gemeldet wird, ist dies ein Segen. Zumindest kann der Code rechtzeitig erkannt und gelöst werden, ohne dass ein Fehler gemeldet wird, aber in der Geschäftslogik treten verschiedene seltsame Probleme auf Das ist noch tragischer, denn wenn man diesem Problem keine Beachtung schenkt, kann es zu versteckten Gefahren für das spätere Geschäft kommen. Was sind also die Implementierungsmethoden? Welche Implementierungen könnten

6 Beispiele, 8 Codeausschnitte, ausführliche Erklärung der For-Schleife in Python 6 Beispiele, 8 Codeausschnitte, ausführliche Erklärung der For-Schleife in Python Apr 11, 2023 pm 07:43 PM

Python unterstützt For-Schleifen und seine Syntax unterscheidet sich geringfügig von anderen Sprachen (wie JavaScript oder Java). Der folgende Codeblock zeigt, wie Sie eine for-Schleife in Python verwenden, um die Elemente in einer Liste zu durchlaufen: Der obige Codeausschnitt gibt drei Buchstaben in separaten Zeilen aus. Sie können die Ausgabe auf dieselbe Zeile beschränken, indem Sie nach der Druckanweisung ein Komma „“ hinzufügen (wenn viele zu druckende Zeichen angegeben sind, wird sie „zeilenumbrochen“). Der Code lautet wie folgt: Wenn Sie möchten Anzeige in einer Zeile statt in mehreren Zeilen. Für Textinhalte können Sie die obige Codeform verwenden. Python bietet auch integrierte Funktionen

See all articles