目次
- 1 1. Sissejuhatus|Milliseid probleeme lahendab for…in tsükkel?
- 2 2. Mis on JavaScripti for…in tsükkel?【Põhiselgitus】
- 3 3. Massiivid ja for…in tsükkel|Olulised tähelepanekud
- 4 4. For…in vs For…of tsükkel【Võrdlustabel】
- 5 5. Praktiline osa:for…in tsükli kasutusnäited ja parimad tavad
- 6 6. Levinud vead ja lahendused for…in tsükliga【Algajatele kohustuslik】
- 7 7. For…in tsükli jõudluse testimine ja alternatiivid
- 8 8. Kokkuvõte|For…in tsükli mõistmine ja järgmised sammud
1. Sissejuhatus|Milliseid probleeme lahendab for…in tsükkel?
JavaScript on üks enim kasutatud programmeerimiskeeli veebiarenduses. Sealhulgas on “tsüklid” hädavajalikud funktsioonid andmete korduvaks töötlemiseks. Eriti kasulik on for…in tsükkel objektide omaduste läbikäimiseks.Artikli eesmärk
Selles artiklis selgitame järgmisi punkte üksikasjalikult:- JavaScripti for…in tsükli põhistruktuur ja kasutamine
- Mida arvestada massiivide puhul
- Erinevused teiste tsüklitega (for…of ja forEach)
- Levinud vead ja nende lahendused
Mida õpid sellest artiklist
- Kuidas tõhusalt töödelda objektide omadusi ja massiivide elemente
- For…in tsükli kitsaskohad ja turvaline kasutamine
- Praktilised koodinäited ja jõudluse võrdlus
2. Mis on JavaScripti for…in tsükkel?【Põhiselgitus】
JavaScriptis kasutatakse for…in tsüklit objektide omaduste korduvaks töötlemiseks. See süntaks sobib eriti hästi objektidele ning võimaldab igat omaduse nime (võtit) ükshaaval läbi käia.Põhistruktuur
Järgmine näide näitab for…in tsükli põhistruktuuri:for (muutuja in objekt) {
// korduv töötlus
}
Parameetrite selgitus:- muutuja: sisaldab hetkel töödeldava omaduse nime (võtit).
- objekt: objekt, mille omadusi soovid läbi käia.
Näide: objekti omaduste loetlemine
const person = {
name: "太郎",
age: 25,
city: "東京"
};
for (const key in person) {
console.log(`${key}: ${person[key]}`);
}
Väljund:name: 太郎
age: 25
city: 東京
Märkus: omaduste järjekord
For…in tsükkel ei taga omaduste järjekorda. JavaScripti spetsifikatsiooni kohaselt ei pruugi omadused ilmuda lisamise järjekorras. Kui vajad kindlat järjekorda, kasuta muid meetodeid (ntObject.keys()
).Olulised omadused
- Lihtne juurdepääs võtmetele: kasulik omaduste nimede dünaamiliseks saamiseks.
- Ainult loendatavad omadused: mitte-loendatavad omadused (
enumerable: false
) ei kuulu tsüklisse. - Pärandatud prototüübi omadused loetletakse samuti: seda teemat käsitleme järgmisena.

3. Massiivid ja for…in tsükkel|Olulised tähelepanekud
JavaScripti for…in tsükkel on loodud objektide omaduste loetlemiseks, kuid seda saab kasutada ka massiividega. Siiski on massiivide puhul mitmeid olulisi tähelepanekuid, mida tuleb arvesse võtta. Selles jaotises selgitame nende käitumist ja kitsaskohti.Põhikäitumine massiivide puhul
Vaatame järgmist näidet:const fruits = ["りんご", "バナナ", "みかん"];
for (const index in fruits) {
console.log(index, fruits[index]);
}
Väljund:0 りんご
1 バナナ
2 みかん
Tähelepanek 1: prototüübi omadused võivad samuti loetleda
Array.prototype.newMethod = function () {
return "新しいメソッド";
};
for (const index in fruits) {
console.log(index, fruits[index]);
}
Väljund:0 りんご
1 バナナ
2 みかん
newMethod undefined
Lahendus:for (const index in fruits) {
if (fruits.hasOwnProperty(index)) {
console.log(index, fruits[index]);
}
}
Tähelepanek 2: järjekorda ei garanteerita
const data = [];
data[10] = "リンゴ";
data[1] = "バナナ";
data[5] = "みかん";
for (const index in data) {
console.log(index, data[index]);
}
Väljund:1 バナナ
5 みかん
10 リンゴ
Tähelepanek 3: indeksid käsitletakse stringidena, mitte arvudena
const numbers = [10, 20, 30];
for (const index in numbers) {
console.log(typeof index); // "string"
}
Lahendus:for (const index in numbers) {
const numIndex = parseInt(index, 10);
console.log(numIndex, numbers[numIndex]);
}
Kokkuvõte
- For…in tsükkel sobib pigem objektide kui massiivide töötlemiseks.
- Kui vajad kindlat järjekorda või numbrilisi indekseid, kasuta for…of tsüklit või tavalist for-tsüklit.

4. For…in vs For…of tsükkel【Võrdlustabel】
JavaScriptis saab kasutada nii for…in kui ka for…of tsükleid, kuid nende eesmärgid ja käitumine erinevad.Põhistruktuuri võrdlus
for…in tsükkel:const obj = { a: 1, b: 2, c: 3 };
for (const key in obj) {
console.log(key); // võti
}
for…of tsükkel:const arr = [10, 20, 30];
for (const value of arr) {
console.log(value); // väärtus
}
Võrdlustabel
Omadus | for…in | for…of |
---|---|---|
Sihtmärk | Objektid ja massiivid | Massiivid ja itereeritavad objektid |
Väljund | Omaduste nimed (võtmed) | Väärtused ise |
Pärandatud prototüübi omadused | Võivad loetleda | Ei loetle |
Järjekorra garantii | Pole garanteeritud | Garanteeritud |
Praktiline näide|massivi töötlemise erinevused
const arr = ['a', 'b', 'c'];
// for...in
for (const index in arr) {
console.log(index); // väljund: 0, 1, 2
}
// for...of
for (const value of arr) {
console.log(value); // väljund: 'a', 'b', 'c'
}
Kokkuvõte
- For…in tsükkel: sobib objektide võtmete töötlemiseks.
- For…of tsükkel: sobib massiivide ja itereeritavate objektide väärtuste töötlemiseks.
5. Praktiline osa:for…in tsükli kasutusnäited ja parimad tavad
Selles jaotises tutvustame JavaScripti for…in tsükli praktilisi näiteid ja soovitatavaid tavasid, mis on kasulikud reaalses arenduses.1. Näide 1|Objekti omaduste filtreerimine
const user = {
name: "田中",
age: 30,
email: "tanaka@example.com",
password: "secret123"
};
const publicData = {};
for (const key in user) {
if (key !== "password") {
publicData[key] = user[key];
}
}
console.log(publicData);
Väljund:{ name: '田中', age: 30, email: 'tanaka@example.com' }
2. Näide 2|Pesastatud objektide töötlemine
const data = {
user: {
name: "佐藤",
info: {
age: 28,
city: "大阪"
}
}
};
function printNested(obj) {
for (const key in obj) {
if (typeof obj[key] === "object") {
printNested(obj[key]);
} else {
console.log(`${key}: ${obj[key]}`);
}
}
}
printNested(data);
Väljund:name: 佐藤
age: 28
city: 大阪
3. Parim tava|Prototüübi omaduste välistamine
const obj = { a: 1, b: 2 };
Object.prototype.c = 3;
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(`${key}: ${obj[key]}`);
}
}
Väljund:a: 1
b: 2
Kokkuvõte
- Näitasime, kuidas for…in tsüklit kasutada objektide filtreerimiseks ja pesastatud struktuuride töötlemiseks.
- Prototüübi omaduste vältimiseks kasuta hasOwnProperty().

6. Levinud vead ja lahendused for…in tsükliga【Algajatele kohustuslik】
1. Viga 1|Prototüübi omadused loetletakse
const obj = { a: 1, b: 2 };
Object.prototype.c = 3;
for (const key in obj) {
console.log(key, obj[key]);
}
Väljund:a 1
b 2
c 3
Lahendus:for (const key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key, obj[key]);
}
}
2. Viga 2|Massiivide puhul kasutamine
const arr = [10, 20, 30];
Array.prototype.extra = "追加データ";
for (const index in arr) {
console.log(index, arr[index]);
}
Väljund:0 10
1 20
2 30
extra undefined
Lahendus:for (const value of arr) {
console.log(value);
}
3. Viga 3|Määramata väärtuste töötlemine
const obj = { a: 1, b: undefined, c: 3 };
for (const key in obj) {
console.log(key, obj[key]);
}
Lahendus:for (const key in obj) {
const value = obj[key] ?? "Vaikeväärtus";
console.log(key, value);
}
Kokkuvõte
- Prototüübi omaduste vältimiseks: kasuta hasOwnProperty().
- Massiivide töötlemiseks: soovitatav on for…of või forEach.
- Määramata väärtuste vältimiseks: kasuta vaikeväärtusi (nt nullish-coalescing).
7. For…in tsükli jõudluse testimine ja alternatiivid
1. Jõudluse võrdlus
for…in tsükkel:const obj = { a: 1, b: 2, c: 3 };
console.time("for...in");
for (const key in obj) {
console.log(key, obj[key]);
}
console.timeEnd("for...in");
Object.keys():console.time("Object.keys");
Object.keys(obj).forEach(key => {
console.log(key, obj[key]);
});
console.timeEnd("Object.keys");
2. Näide võrdlustulemustest
for...in: 0.015ms
Object.keys: 0.005ms
3. Soovitatud meetodid
- Objektide töötlemiseks: eelistatud on Object.keys().
- Massiivide töötlemiseks: for…of või forEach on kiirem ja turvalisem.
Kokkuvõte
- For…in tsükkel on mugav, kuid jõudluse ja turvalisuse tagamiseks tuleks valida sobiv alternatiiv vastavalt kasutusjuhtumile.

8. Kokkuvõte|For…in tsükli mõistmine ja järgmised sammud
1. Artikli põhijäreldused
- For…in tsükli süntaks ja eesmärk:
- Kasutatakse objektide omaduste (võtmete) korduvaks läbimiseks.
- Optimeeritud pigem objektidele kui massiividele.
- Kasutamine massiividega:
- Järjekord ei ole garanteeritud ja pärandatud omadused võivad loenduda.
- Massiivide puhul on soovitatav kasutada for…of või forEach().
- For…in vs For…of:
- For…in: loendab võtmeid.
- For…of: töötleb väärtusi otse.
- Kasutusnäited ja parimad tavad:
- Pesastatud objektide rekursiivne läbimine.
- hasOwnProperty() abil prototüübi omaduste välistamine.
- Object.keys() või Object.entries() abil parem jõudlus ja turvalisus.
- Jõudluse optimeerimine:
- Object.keys() + forEach() pakub paremat järjekorra kontrolli ja jõudlust.
2. Vastused korduma kippuvatele küsimustele
K1. Kas for…in tsüklit ei peaks üldse kasutama?- Vastus: Sobib hästi objektide omaduste loendamiseks, kuid massiivide või jõudluskriitiliste ülesannete puhul on turvalisemad ja tõhusamad alternatiivid nagu for…of või Object.keys().
- Vastus: Jah, see on osa standardkäitumisest. Probleemi vältimiseks kasuta hasOwnProperty().
- Objektid: for…in või Object.keys().
- Massiivid: for…of või forEach().
3. Järgmised sammud|Mida edasi õppida
- Itereeritavad objektid:
- Map, Set, WeakMap, WeakSet ja nende läbimiseks sobivad tsüklid.
- Kõrgema järgu funktsioonid:
- map(), filter(), reduce() kasutamine andmete töötlemiseks.
- Objektide ja massiivide täiustatud tehnikad:
- Object.values(), Object.entries() kasutamine andmete töötlemisel.
- Uued JavaScripti võimalused:
- ES6+ funktsioonid nagu spread operaator ja detsentraliseerimine (destructuring).
- Asünkroonne programmeerimine:
- Promise, async/await ja nende kasutamine dünaamiliste andmete töötlemisel.
4. Kokkuvõte|Valda JavaScripti tsüklid
Selles artiklis keskendusime for…in tsüklile, käsitledes põhitõdesid, praktilisi näiteid, ohukohti ja alternatiive. Kõige olulisemad punktid:- For…in tsükkel sobib objektide omaduste loendamiseks, kuid massiivide ja jõudluskriitiliste ülesannete puhul vali sobivam meetod.
- Et vältida vigu ja ootamatut käitumist, järgi alati parimaid tavasid ja kasuta turvalisi meetodeid.
広告