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]}`);
}
// äºæ³ãããçµæ:
// "a: 1"
// "b: 2"
// "c: 3"
æ§æ
for (variable in object)
statement
弿°
variable-
ããããã®å復å¦çã«ããã¦ãæååã§ããããã£åãåãåãã¾ãã
constãletãvarã®ä½ããã®å®£è¨ãã¾ãã¯ä»£å ¥ã¿ã¼ã²ããï¼ä¾ãã°ã以å宣è¨ããã夿°ãããªãã¸ã§ã¯ãããããã£ãæ§é åè§£ãã¿ã¼ã³ï¼ã§ããvarã§å®£è¨ããã夿°ã¯ã«ã¼ãã®ãã¼ã«ã«å¤æ°ã«ã¯ãªãã¾ãããããªãã¡for...inã«ã¼ãã¨åãã¹ã³ã¼ãã«ãªãã¾ãã object-
ã·ã³ãã«ã§ã¯ãªãåæå¯è½ãªããããã£ãå復å¦çãããªãã¸ã§ã¯ãã§ãã
statement-
ããããã®å復å¦çã§å®è¡ãããæã§ãã
variableãåç §ãããã¨ãã§ãã¾ãããããã¯æã使ç¨ãã¦ãè¤æ°ã®æã使ç¨ãããã¨ãã§ãã¾ãã
解説
ãã®ã«ã¼ãã¯ããªãã¸ã§ã¯ãèªèº«ã¨ããªãã¸ã§ã¯ãããã®ãããã¿ã¤ããã§ã¼ã³ããç¶æ¿ããããããã£ï¼ãããã¿ã¤ããã§ã¼ã³ã«ããã¦ããªãã¸ã§ã¯ãããé ããããã¿ã¤ãã®ããããã£ããããè¿ããããã¿ã¤ãã®ããããã£ãåªå ãããï¼ã®ãã¹ã¦ã®åæå¯è½ãªããããã£ãå復å¦çãããã¨ã«ãªãã¾ãã
ä»ã®ã«ã¼ãæã¨åæ§ã«ãããã¼å¶å¾¡æã statement å
é¨ã§ä½¿ç¨ãããã¨ãã§ãã¾ãã
breakã¯ãstatementã®å®è¡ã忢ããã«ã¼ãã®å¾ã®æåã®æã«ç§»åãã¾ããcontinueã¯statementã®å®è¡ã忢ããã«ã¼ãã®æ¬¡ã®å復å¦çã«ç§»ãã¾ãã
for...in ã«ã¼ãã¯ãåæå¯è½ãªã·ã³ãã«ä»¥å¤ã®ããããã£ã«å¯¾ãã¦ã®ã¿å復å¦çãè¡ãã¾ãã Array ã Object ã®ãããªçµã¿è¾¼ã¿ã³ã³ã¹ãã©ã¯ã¿ã¼ããçæãããªãã¸ã§ã¯ãã¯ãåæå¯è½ã§ãªãããããã£ã Array.prototype ã Objet.prototype ãããä¾ãã° Array ã® indexOf() ã¡ã½ããã Object ã® toString() ã¡ã½ãããç¶æ¿ãã¦ãã¾ãããããã㯠for...in ã«ã¼ãã§ã¯å¦çããã¾ããã
ç¾ä»£ã® ECMAScript ã®ä»æ§ã§ã¯ãèµ°æ»é åºã¯æç¢ºã«å®ç¾©ããã¦ããã å®è£ å士ã®éã§ä¸è²«ãã¦ãã¾ãããããã¿ã¤ããã§ã¼ã³ã®ããããã®æåå ã§ã¯ãéè² ã®æ´æ°å¤ï¼é åã®æ·»åã¨ãªããã®ï¼ã¯ãã¹ã¦å¤ã®æé ã§æåã«èµ°æ»ãããæ¬¡ã«æååã®ãã¼ãããããã£ã®ä½ææç³»åã§æé ã«èµ°æ»ããã¾ãã
for...in ã® variable é¨åã¯ã= æ¼ç®åã®åã«æ¥ããã¨ãã§ãããã®ã§ããã°ãä½ã§ãåãå
¥ãããã¨ãã§ãã¾ããã«ã¼ãæ¬ä½ã®ä¸ã§å代å
¥ãããªãéããconst ã使ç¨ãã¦å¤æ°ã宣è¨ã§ãã¾ãï¼ãããã¯å復å¦çæ¯ã«å¥ã
ã®å¤æ°ã¨è¦ãªããããããå¤åãå¯è½ã§ãï¼ãããã§ãªãå ´åã¯ãlet ã使ç¨ãã¦ãã ãããè¤æ°ã®ãã¼ã«ã«å¤æ°ã«ä»£å
¥ããã«ã¯æ§é åè§£ã使ç¨ã§ãã¾ããã¾ãã¯ãfor (x.y in iterable) ã®ãããªããããã£ã¢ã¯ã»ãµã¼ã使ç¨ãã¦ãªãã¸ã§ã¯ãã®ããããã£ã«å¤ã代å
¥ãããã¨ãã§ãã¾ãããã ããusing ããã³ await using ã¯è¨±å¯ããã¾ããããããã®å®£è¨ã§ã¯ç ´æ£å¯è½ãªãªãã¸ã§ã¯ããå¿
è¦ã§ããã夿°ã¯å¸¸ã«æååã¾ãã¯ã·ã³ãã«ã¨ãªãããã§ãã
å¤ãæ§æã§ã¯ãåæååä»ãã®ã«ã¼ã夿°ã var 宣è¨ã§è¡ããã¨ãã§ãã¾ããããã¯å³æ ¼ã¢ã¼ãã§ã¯æ§æã¨ã©ã¼ãçºçããé峿 ¼ã¢ã¼ãã§ã¯ç¡è¦ããã¾ãã
åé¤ã追å ã夿´ãããããããã£
for...in ã¯ããããã£ãã¼ã以ä¸ã®æ¹æ³ã§å·¡åãã¾ãã
- ã¾ããç¾å¨ã®ãªãã¸ã§ã¯ãã®ãã¹ã¦ã®èªèº«ã®æååãã¼ãåå¾ãã¾ãããã®æ¹æ³ã¯
Object.getOwnPropertyNames()ã¨ã¨ã¦ãä¼¼ã¦ãã¾ãã - åãã¼ã«ã¤ãã¦ãåãå¤ãæã¤æååãããã¾ã§è¨ªåããããã¨ããªãå ´åãããããã£è¨è¿°åãåå¾ããããã®ããããã£ãåæå¯è½ã§ããå ´åã«ã®ã¿è¨ªåããã¾ãããã ãããã®ããããã£æååã¯åæå¯è½ã§ãªãã¨ãè¨ªåæ¸ã¿ã¨ãã¦ãã¼ã¯ããã¾ãã
- ãã®å¾ãç¾å¨ã®ãªãã¸ã§ã¯ãã¯ãã®ãããã¿ã¤ãã¨ç½®ãæãããããã®ããã»ã¹ãç¹°ãè¿ããã¾ãã
ããªãã¡ã次ã®ããã«ãªãã¾ãã
- å復å¦çä¸ã«ç¾å¨åç §ããã¦ãããªãã¸ã§ã¯ãã«è¿½å ãããããããã£ã¯ãã©ããåç §ããã¾ãããç¾å¨ã®ãªãã¸ã§ã¯ãã®ãã¹ã¦ã®èªèº«ã®ããããã£ã¯ãäºåã«ä¿åããã¦ããããã§ãã
- ãããã¿ã¤ããã§ã¼ã³å ã®è¤æ°ã®ãªãã¸ã§ã¯ããåãååã®ããããã£ãæã¤å ´åãæåã®ãªãã¸ã§ã¯ãã®ã¿ãèæ ®ããããã¤ãã®ããããã£ãåæå¯è½ã§ããå ´åã«ã®ã¿ã¢ã¯ã»ã¹ããã¾ããåæå¯è½ã§ãªãå ´åããããã¿ã¤ããã§ã¼ã³ã®ä¸ä½ã«ããåãååã®ããããã£ãåæå¯è½ã§ãã£ã¦ãããããã¯ä¸ååç §ããã¾ããã
ä¸è¬çã«ãå復å¦çä¸ã¯ç¾å¨ã¢ã¯ã»ã¹ãã¦ããããããã£ä»¥å¤ã®ããããã£ã追å ã夿´ãåé¤ããªããã¨ãæåã§ãã仿§æ¸ã§ã¯ã以ä¸ã®ããããã®å ´åã«å®è£ ãä¸è¨ã®ã¢ã«ã´ãªãºã ã«å¾ããªããã¨ãæç¤ºçã«è¨±å¯ãã¦ãã¾ãã
- ãªãã¸ã§ã¯ãã®ãããã¿ã¤ããã§ã¼ã³ã¯å復å¦çä¸ã«å¤æ´ãããã
- å復å¦çä¸ã«ãããããã£ããªãã¸ã§ã¯ãã¾ãã¯ãã®ãããã¿ã¤ããã§ã¼ã³ããåé¤ãããã
- å復å¦çä¸ã«ããªãã¸ã§ã¯ãã®ãããã¿ã¤ããã§ã¼ã³ã«ããããã£ã追å ãããã
- ããããã£ã®åæå¯è½æ§ãå復å¦çä¸ã«å¤æ´ãããã
ãããã®å ´åãå®è£ ãæå¾ ããåä½ã¨ã¯ç°ãªãæåã示ãå¯è½æ§ãããããããã¯å®è£ éã§ç°ãªãæåã示ããã¨ãããã¾ãã
é åã®å復å¦ç㨠for...in
é
åã®æ·»åã¯æ´æ°åãæã¤åãªãåæå¯è½ãªããããã£ã§ããããã以å¤ã¯ä¸è¬çãªãªãã¸ã§ã¯ãã®ããããã£ã¨åãã§ããfor...in ã«ã¼ãã¯ããã¹ã¦ã®æ´æ°ãã¼ãä»ã®ãã¼ã®åã«ãå³å¯ã«å¢å ããé åºã§å復å¦çããã®ã§ãfor...in ã®åä½ã¯é常ã®é
åã®å復å¦çã«è¿ããã®ã§ããããããfor...in ã«ã¼ãã¯ãéæ´æ°ã®ååãæã¤ããããã£ãç¶æ¿ãããããããã£ãå«ãã¦ãåæå¯è½ãªãã¹ã¦ã®ããããã£ãè¿ãã¾ããfor...of ã¨ã¯ç°ãªããfor...in ã¯é
åã®ã¤ãã¬ã¼ã¿ã¼ã®ä»£ããã«ããããã£ã®åæã使ç¨ãã¾ããçé
åã§ã¯ãfor...of ã¯ç©ºã®ã¹ãããã«ã¢ã¯ã»ã¹ãã¾ãããfor...in ã¯ããã§ã¯ããã¾ããã
æ°å¤ã®æ·»åã使ã£ã for ã«ã¼ãï¼ã Array.prototype.forEach() ã for...of ã«ã¼ãï¼ã使ã£ãæ¹ããæååã§ã¯ãªãæ°å¤ã®æ·»åãè¿ããã¤ã³ããã¯ã¹ä»¥å¤ã®ããããã£ãé¿ãããã¨ãã§ããã®ã§é©ãã¦ãã¾ãã
åºæã®ããããã£ã ãã§ç¹°ãè¿ã
ãªãã¸ã§ã¯ãã®ãããã¿ã¤ãã§ã¯ãªãããªãã¸ã§ã¯ãèªä½ã«ä»å±ããããããã£ã®ã¿ãèãããå ´åã¯ã以ä¸ã®ãã¯ããã¯ã使ç¨ãããã¨ãã§ãã¾ãã
Object.keys ã¯åæå¯è½ãªèªåèªèº«ã®æååããããã£ã®ãªã¹ããè¿ã䏿¹ã Object.getOwnPropertyNames ã¯åæå¯è½ã§ãªãããããã£ãæ ¼ç´ãã¾ãã
å¤ãã® JavaScript ã¹ã¿ã¤ã«ã¬ã¤ãããªã³ã¿ã¼ã¯ãfor...in ã®ä½¿ç¨ãæ¨å¥¨ãã¦ãã¾ããããªããªãããããã¿ã¤ããã§ã¼ã³å
¨ä½ãå復å¦çããã®ã§ãæãã çµæã«ãªããã¨ã¯ã»ã¨ãã©ãªããããåºã使ç¨ããã¦ãã for...of ã«ã¼ãã¨æ··åãã¦ãã¾ãå¯è½æ§ãããããã§ããfor...in ã®æãå®ç¨çãªç¨éã¯ãããã°ã§ãï¼ã³ã³ã½ã¼ã«ã«åºåãããªã©ãã¦ï¼ãªãã¸ã§ã¯ãã®ããããã£ã調ã¹ãã®ã«ç°¡åãªæ¹æ³ã§ãããããªãã¸ã§ã¯ããã¢ãããã¯ãªãã¼ã¨å¤ã®ãã¢ã¨ãã¦ä½¿ç¨ããããããªç¶æ³ã§ã¯ãfor...inã«ãã£ã¦ããããã®ãã¼ã®ãããããå
·ä½çãªå¤ãä¿æãã¦ãããã©ããã調ã¹ããã¨ãã§ãã¾ãã
ä¾
>for...in ã®ä½¿ç¨
以ä¸ã® for...in ã«ã¼ãã¯ããªãã¸ã§ã¯ãã®åæå¯è½ãªã·ã³ãã«ã§ã¯ãªãããããã£ããã¹ã¦å復ãããã®ããããã£åã¨å¤ãæååã§è¨é²ãã¾ãã
const obj = { a: 1, b: 2, c: 3 };
for (const prop in obj) {
console.log(`obj.${prop} = ${obj[prop]}`);
}
// ãã°:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
èªèº«ã®ããããã£ã®å復å¦ç
次ã®é¢æ°ã§ã¯ Object.hasOwn() ã®ä½¿ãæ¹ãä¾ç¤ºãã¦ãã¾ããç¶æ¿ãããããããã£ã¯è¡¨ç¤ºããã¾ããã
const triangle = { a: 1, b: 2, c: 3 };
function ColoredTriangle() {
this.color = "red";
}
ColoredTriangle.prototype = triangle;
const obj = new ColoredTriangle();
for (const prop in obj) {
if (Object.hasOwn(obj, prop)) {
console.log(`obj.${prop} = ${obj[prop]}`);
}
}
// ãã°:
// "obj.color = red"
åæå¤æ´
è¦å:
ãã®ãããªã³ã¼ããèªåã§æ¸ãã¹ãã§ã¯ããã¾ãããããã¯ãfor...in ã®åä½ãç¹å®ã®ç¹æ®ãªã±ã¼ã¹ã§ç¤ºãããã«ããã«è¨è¼ãã¦ããã ãã§ãã
å復å¦çä¸ã«ç¾å¨ã®ãªãã¸ã§ã¯ãã«è¿½å ãããããããã£ã¯æ±ºãã¦è¨ªåããã¾ããã
const obj = { a: 1, b: 2 };
for (const prop in obj) {
console.log(`obj.${prop} = ${obj[prop]}`);
obj.c = 3;
}
// ãã°:
// obj.a = 1
// obj.b = 2
ã·ã£ãã¦åãããããããã£ã¯ãä¸åº¦ã ãå¦çããã¾ãã
const proto = { a: 1 };
const obj = { __proto__: proto, a: 2 };
for (const prop in obj) {
console.log(`obj.${prop} = ${obj[prop]}`);
}
// ãã°:
// obj.a = 2
Object.defineProperty(obj, "a", { enumerable: false });
for (const prop in obj) {
console.log(`obj.${prop} = ${obj[prop]}`);
}
// ä½ããã°ã«è¨é²ããªããæåã«å¦çããã "a" ããããã£ãåæä¸å¯è½ã§ããããã
ããã«ã以ä¸ã®ã±ã¼ã¹ã§ã¯åä½ãæªå®ç¾©ã§ãããå®è£ ãæå®ãããã¢ã«ã´ãªãºã ããé¸è±ããå¾åããããã¨ã«çæãã¦ãã ããã
å復ä¸ã«ãããã¿ã¤ãã夿´ãã¾ãã
const obj = { a: 1, b: 2 };
for (const prop in obj) {
console.log(`obj.${prop} = ${obj[prop]}`);
Object.setPrototypeOf(obj, { c: 3 });
}
å復å¦çä¸ã®ããããã£ãåé¤ãã¾ãã
const obj = { a: 1, b: 2, c: 3 };
// å¦çåã«ããããã£ãåé¤
for (const prop in obj) {
console.log(`obj.${prop} = ${obj[prop]}`);
delete obj.c;
}
const obj2 = { a: 1, b: 2, c: 3 };
// å¦çå¾ã«ããããã£ãåé¤
for (const prop in obj2) {
console.log(`obj2.${prop} = ${obj2[prop]}`);
delete obj2.a;
}
å復å¦çä¸ã«ãããã¿ã¤ãã«è¿½å ãããåæå¯è½ãªããããã£ã§ãã
const proto = {};
const obj = { __proto__: proto, a: 1, b: 2 };
for (const prop in obj) {
console.log(`obj.${prop} = ${obj[prop]}`);
proto.c = 3;
}
å復å¦çä¸ã«ããããã£ã®åæå¯è½æ§ã夿´ãã¾ãã
const obj = { a: 1, b: 2, c: 3 };
for (const prop in obj) {
console.log(`obj.${prop} = ${obj[prop]}`);
Object.defineProperty(obj, "c", { enumerable: false });
}
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-for-in-and-for-of-statements> |