for...inとfor...ofの違い
JavaScriptのfor...in
とfor...of
の違い
for...in
とfor...of
は、JavaScriptの配列やオブジェクトを反復処理するためのループ構文です。しかし、それらの動作は異なります。
for...in
- プロトタイプチェーンの考慮
for...in
は、オブジェクトのプロトタイプチェーンも考慮します。つまり、オブジェクト自身だけでなく、そのプロトタイプチェーン上のプロパティも反復します。 - 順序が保証されない
プロパティの順序は保証されません。 - オブジェクトのプロパティを反復
for...in
は、オブジェクトのプロパティを反復します。各反復で、プロパティ名が変数に割り当てられます。
例
const person = {
name: "Alice",
age: 30,
city: "Tokyo"
};
for (let property in person) {
console.log(property, person[property]);
}
- プロトタイプチェーンの考慮なし
for...of
は、プロトタイプチェーンを考慮しません。 - 順序が保証される
要素の順序は保証されます。 - イテラブルオブジェクトの要素を反復
for...of
は、イテラブルオブジェクトの要素を反復します。各反復で、要素が変数に割り当てられます。
const numbers = [1, 2, 3, 4, 5];
for (let number of numbers) {
console.log(number);
}
要約
- イテラブルオブジェクトの要素
for...of
- オブジェクトのプロパティ
for...in
for...in
とfor...of
の例
const person = {
name: "Alice",
age: 30,
city: "Tokyo"
};
for (let property in person) {
console.log(property, person[property]);
}
このコードでは、person
オブジェクトのプロパティを反復します。各反復で、プロパティ名(property
)が変数に割り当てられ、そのプロパティに対応する値(person[property]
)がコンソールに出力されます。
const numbers = [1, 2, 3, 4, 5];
for (let number of numbers) {
console.log(number);
}
このコードでは、numbers
配列の要素を反復します。各反復で、配列の要素(number
)が変数に割り当てられ、コンソールに出力されます。
- for...of
イテラブルオブジェクト(配列、セット、マップなど)の要素を反復し、要素の値を取得します。 - for...in
オブジェクトのプロパティを反復し、プロパティ名と値を取得します。
Object.keys()とObject.values()
- Object.values(object)
オブジェクトのプロパティ値を配列として返します。
const person = { name: "Alice", age: 30, city: "Tokyo" };
// プロパティ名を取得
const keys = Object.keys(person);
for (let key of keys) {
console.log(key); // "name", "age", "city"
}
// プロパティ値を取得
const values = Object.values(person);
for (let value of values) {
console.log(value); // "Alice", 30, "Tokyo"
}
forEach()メソッド
- 各要素に対してコールバック関数を呼び出します。
- 配列や他のイテラブルオブジェクトの要素を反復します。
const numbers = [1, 2, 3, 4, 5];
numbers.forEach(number => {
console.log(number);
});
forループ
- 従来のループ構文で、インデックスを使用して要素にアクセスします。
const numbers = [1, 2, 3, 4, 5];
for (let i = 0; i < numbers.length; i++) {
console.log(numbers[i]);
}
選択の基準
- 読みやすさ
for...of
とforEach()
は通常、より読みやすいコードとなります。 - パフォーマンス
for...of
とforEach()
は一般的にfor
ループよりも効率的です。 - イテラブルオブジェクトの要素
for...of
、forEach()
、for
ループ - オブジェクトのプロパティ
for...in
、Object.keys()
、Object.values()
javascript arrays for-loop