for...in
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015ë 7ì.
for...in 문ì ììë ì´ê±° ê°ë¥í ìì±ë¤ì í¬í¨íì¬ ê°ì²´ìì 문ìì´ë¡ í¤ê° ì§ì ë 모ë ì´ê±° ê°ë¥í ìì±ì ëí´ ë°ë³µí©ëë¤. (Symbolë¡ í¤ê° ì§ì ë ìì±ì 무ìí©ëë¤.)
ìëí´ ë³´ê¸°
const object = { a: 1, b: 2, c: 3 };
for (const property in object) {
console.log(`${property}: ${object[property]}`);
}
// Expected output:
// "a: 1"
// "b: 2"
// "c: 3"
문ë²
for (const variable in object) {
statement;
}
íë¼ë¯¸í°
ì¤ëª
for...in문ì ì´ê±° ê°ë¥í non-Symbol ìì±ì ëí´ìë§ ë°ë³µí©ëë¤.
Arrayë Object ë± ë´ì¥ constructor를 íµí´ ë§ë¤ì´ì§ ê°ì²´ë Stringì indexOf(), Objectì toString()ì ê°ì´ Object.prototype, String.prototype ë¡ë¶í° ì´ê±°ê° ê°ë¥íì§ ìì ìì±ë¤ì ììí´ììµëë¤. for...in문ì ê°ì²´ ìì²´ì 모ë ì´ê±° ê°ë¥í ìì±ë¤ê³¼ íë¡í íì
ì²´ì¸ì¼ë¡ë¶í° ììë°ì ìì±ë¤ì ëí´ ë°ë³µí ê²ì
ëë¤. (ë ê°ê¹ì´ íë¡í íì
ì ìì±ë¤ì´ íë¡í íì
ì²´ì¸ ê°ì²´ë¡ë¶í° ë ë©ë¦¬ ë¨ì´ì§ íë¡í íì
ì ìì±ë³´ë¤ ë ì°ì í©ëë¤.)
ìì±ì ìì , ì¶ê°, ìì
for..in 문ì ììì ììë¡ ê°ì²´ì ìì±ë¤ì ëí´ ë°ë³µí©ëë¤. (ì ì´ë cross-browser ì¤ì ììë ì íë©´ì ì¼ë¡ ë³´ì´ë ë°ë³µì ìì를 ë°ë¥¼ ì ìëì§ì ëí´ì delete 를 ì°¸ê³ íììì¤.)
ë§ì½ í ë°ë³µì¼ë¡ ìì±ì´ ìì ë íì 방문íë ê²½ì°, ë°ë³µë¬¸ììì ê·¸ ê°ì ëì¤ì ê°ì¼ë¡ ì í´ì§ëë¤. 방문í기 ì ì ìì ë ìì±ì ëí´ìë ì´íì 방문íì§ ììµëë¤. ë°ë³µì´ ë°ìíë ê°ì²´ì ì¶ê°ë ìì±ì 방문íê±°ë ë°ë³µìì ìëµí ì ììµëë¤.
ì¼ë°ì ì¼ë¡ íì¬ ë°©ë¬¸ ì¤ì¸ ìì± ì¸ìë ë°ë³µíë ëì ê°ì²´ì ìì±ì ì¶ê°, ìì , ì ê±°íì§ ìë ê²ì´ ê°ì¥ ì¢ìµëë¤. ì¶ê°ë ìì±ì 방문í ê²ì¸ì§, ìì ë ìì±(íì¬ì ìì± ì ì¸)ì ìì ì´ì í¹ì ì´íì 방문í ê²ì¸ì§, ìì ë ìì±ì ìì ì´ì ì 방문í ê²ì¸ì§ì ëí´ìë ë³´ì¥í ì ììµëë¤.
ë°°ì´ì ë°ë³µê³¼ for...in
Note:
for...inì ì¸ë±ì¤ì ììê° ì¤ìíArrayìì ë°ë³µì ìí´ ì¬ì©í ì ììµëë¤.
ë°°ì´ ì¸ë±ì¤ë ì ìë¡ ë ì´ê±° ê°ë¥í ìì±ì´ë©°, ì¼ë°ì ì¸ ê°ì²´ì ìì±ë¤ê³¼ ê°ìµëë¤. for...inì í¹ì ììì ë°ë¼ ì¸ë±ì¤ë¥¼ ë°ííë ê²ì ë³´ì¥í ì ììµëë¤. for...inë°ë³µë¬¸ì ì ìê° ìë ì´ë¦ì ê°ì§ ìì±, ììë 모ë ì´ê±° ê°ë¥í ìì±ë¤ì ë°íí©ëë¤.
ë°ë³µëë ììë 구íì ë°ë¼ ë¤ë¥´ê¸° ë문ì, ë°°ì´ì ë°ë³µì´ ì¼ê´ë ììë¡ ìì를 방문íì§ ëª»í ìë ììµëë¤. ê·¸ë¬ë¯ë¡ 방문ì ììê° ì¤ìí ë°°ì´ì ë°ë³µììë ì«ì ì¸ë±ì¤ë¥¼ ì¬ì©í ì ìë for ë°ë³µë¬¸ì ì¬ì©íë ê²ì´ ì¢ìµëë¤.(ëë Array.prototype.forEach(), for...of를 ê¶ì¥í©ëë¤.)
ìì²´ ìì±ë§ ë°ë³µ
ë§ì½ ë¹ì ì´ ê°ì²´ì íë¡í íì
ì´ ìë ê°ì²´ ìì²´ì ì°ê²°ë ìì±ë§ ê³ ë ¤íë¤ë©´ getOwnPropertyNames()ë hasOwnProperty()를 ì¬ì©íììì¤.(propertyIsEnumerable() ëí ê°ë¥í©ëë¤.) ëë ì¸ë¶ì ì¸ ì½ë ê°ìì´ ìë¤ë©´ ì²´í¬ ë©ìëë¡ ë´ì¥ íë¡í íì
ì íì¥í ì ììµëë¤.
ì for...inì ì¬ì©í©ëê¹?
for...inì´ ê°ì²´ì ë°ë³µì ìí´ ë§ë¤ì´ì¡ì§ë§, ë°°ì´ì ë°ë³µì ìí´ìë ì¶ì²ëì§ ìê³ , Array.prototype.forEach(), for...ofê° ì´ë¯¸ ì¡´ì¬í©ëë¤. ê·¸ë¬ë©´ for...inì ì´ë»ê² ì¬ì©íë ê²ì´ ì¢ìê¹ì?
ì´ê²ì ì½ê² ê°ì²´ì ìì±ì íì¸(ì½ìì´ë ë¤ë¥¸ ë°©ë²ì¼ë¡ ì¶ë ¥)í ì ì기 ë문ì ì¤ì§ì ì¼ë¡ ëë²ê¹ ì ìí´ ì¬ì©ë ì ììµëë¤. ë°°ì´ì´ ë°ì´í°ì ì ì¥ì ìì´ìë ë ì¤ì©ì ì´ì§ë§, í¤-ê° ìì´ ì í¸ëë ë°ì´í°ì ê²½ì°(ìì±ì´ "key"ì ìí ì í¨) í¹ì ê°ì ê°ì§ í¤ê° ìëì§ íì¸íë ¤ë ê²½ì°ì for...inì ì¬ì©í ì ììµëë¤.
ìì
>for...inì ì¬ì©
ìëì ìë ì´ê±° ê°ë¥í non-Symbolìì±ë¤ì ë°ë³µí´ì ìì±ì ì´ë¦ê³¼ ê·¸ ê°ì 기ë¡í©ëë¤.
var obj = { a: 1, b: 2, c: 3 };
for (const prop in obj) {
console.log(`obj.${prop} = ${obj[prop]}`);
}
// Output:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
ìì²´ ìì± ë°ë³µ
ìëë hasOwnProperty() 를 ì¬ì©íë ì를 ë³´ì¬ì£¼ê³ ììµëë¤. ììë ìì±ì íìëì§ ììµëë¤.
var triangle = { a: 1, b: 2, c: 3 };
function ColoredTriangle() {
this.color = "red";
}
ColoredTriangle.prototype = triangle;
function show_own_props(obj, objName) {
var result = "";
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
result += objName + "." + prop + " = " + obj[prop] + "\n";
}
}
return result;
}
o = new ColoredTriangle();
alert(show_own_props(o, "o")); /* alerts: o.color = red */
ëª ì¸ì
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-for-in-and-for-of-statements> |
ë¸ë¼ì°ì í¸íì±
Compatibility: Initializer expressions in strict mode
Prior to Firefox 40, it was possible to use an initializer expression
(i=0) in a for...in loop:
const obj = { a: 1, b: 2, c: 3 };
for (var i = 0 in obj) {
console.log(obj[i]);
}
// 1
// 2
// 3
This nonstandard behavior is now ignored in version 40 and later, and will present a SyntaxError ("for-in loop head declarations may not have initializers") error in strict mode (bug 748550 and bug 1164741).
Other engines such as v8 (Chrome), Chakra (IE/Edge), and JSC (WebKit/Safari) are investigating whether to remove the nonstandard behavior as well.
See also
for...ofâ a similar statement that iterates over the property valuesfor- Iterators and Generator functions (usable with
for...ofsyntax) - Enumerability and ownership of properties
Object.getOwnPropertyNames()Object.hasOwn()Array.prototype.forEach()