mirror of
https://git.proxmox.com/git/pve-eslint
synced 2025-10-04 14:38:51 +00:00

includes a (minimal) working wrapper Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
53 lines
1.4 KiB
Markdown
53 lines
1.4 KiB
Markdown
# Require Guarding for-in (guard-for-in)
|
|
|
|
Looping over objects with a `for in` loop will include properties that are inherited through the prototype chain. This behavior can lead to unexpected items in your for loop.
|
|
|
|
```js
|
|
for (key in foo) {
|
|
doSomething(key);
|
|
}
|
|
```
|
|
|
|
Note that simply checking `foo.hasOwnProperty(key)` is likely to cause an error in some cases; see [no-prototype-builtins](no-prototype-builtins.md).
|
|
|
|
## Rule Details
|
|
|
|
This rule is aimed at preventing unexpected behavior that could arise from using a `for in` loop without filtering the results in the loop. As such, it will warn when `for in` loops do not filter their results with an `if` statement.
|
|
|
|
Examples of **incorrect** code for this rule:
|
|
|
|
```js
|
|
/*eslint guard-for-in: "error"*/
|
|
|
|
for (key in foo) {
|
|
doSomething(key);
|
|
}
|
|
```
|
|
|
|
Examples of **correct** code for this rule:
|
|
|
|
```js
|
|
/*eslint guard-for-in: "error"*/
|
|
|
|
for (key in foo) {
|
|
if (Object.prototype.hasOwnProperty.call(foo, key)) {
|
|
doSomething(key);
|
|
}
|
|
}
|
|
|
|
for (key in foo) {
|
|
if ({}.hasOwnProperty.call(foo, key)) {
|
|
doSomething(key);
|
|
}
|
|
}
|
|
```
|
|
|
|
## Related Rules
|
|
|
|
* [no-prototype-builtins](no-prototype-builtins.md)
|
|
|
|
## Further Reading
|
|
|
|
* [Exploring JavaScript for-in loops](https://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/)
|
|
* [The pitfalls of using objects as maps in JavaScript](http://2ality.com/2012/01/objects-as-maps.html)
|