MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Pernyataan for...in mengulang setiap properti enumerable dari sebuah objek, dalam urutan sembarang. Untuk setiap properti yang berbeda, pernyataan dapat dieksekusi.

Sintak

for (variable in object) {...
}
variable
Sebuah nama properti yang berbeda ditugaskan untuk variabel pada setiap iterasi.
object
Objek yang propertinya enumerable yang diiterasi.

Deskripsi

Perulangan for...in hanya mengiterasi pada properti enumerable. Objek yang dibuat dari built-in konstruktor seperti Array dan Object telah mewarisi properti non-enumerable dari Object.prototype dan String.prototype, seperti String's indexOf() metode atau Object's toString() metode. Perulangan akan iterate atas semua properti enumerable dari objek itu sendiri dan mereka objek mewarisi dari prototipe konstruktor ini (properti lebih dekat ke objek di properti mata rantai prototipe menggantikan prototipe' properti).

Penghapusan, penambahan atau perubahan pada properti

Perulangan for...in mengiterasi properti suatu objek dalam urutan sembarang (lihat delete Operator untuk lebih lanjut tentang mengapa salah satu tidak dapat bergantung pada keteraturan tampak dari iterasi, setidaknya dalam pengaturan lintas-browser). Jika properti yang diubah dalam satu iterasi dan kemudian mengunjungi di lain waktu, nilainya dalam lingkaran adalah nilai pada waktu kemudian. Sebuah properti yang dihapus sebelum telah dikunjungi tidak akan dikunjungi nanti. Sifat ditambahkan ke objek dimana iterasi terjadi baik dapat dikunjungi atau dihilangkan dari iterasi. Secara umum yang terbaik adalah tidak untuk menambah, mengubah atau menghapus properti dari objek selama iterasi, selain properti saat ini sedang mengunjungi. Tidak ada jaminan apakah properti menambahkan akan dikunjungi, apakah properti dimodifikasi (selain yang saat ini) akan dikunjungi sebelum atau setelah dimodifikasi, atau apakah properti dihapus akan dikunjungi sebelum dihapus.

Iterasi Array dan for...in

Catatan: for...in tidak perlu digunakan untuk mengiterasi sebuah Array dimana urutan indeksnya sangat penting.

Index array hanyalah properti enumerable dengan nama integer dan tidak sama dengan properti Objek pada umumnya. Disini tidak akan menjamin jika for...in akan mengembalikan indek pada urutan tertentu.  Pernyataan for...in akan mengembalikan semua properti enumerable, termasuk didalamnya dengan nama non–integer dan serta turunannya.

Karena urutan iterasi merupakan implementation-dependent, pengiterasian pada array mungkin tidak membaca elemen pada urutan yang urut. Karena itu lebih baik menggunakan perulangan for dengan menggunakan nomor indek (atau Array.prototype.forEach() atau for...of loop) ketika mengiterasi array dimana urutan akses sangat penting.

Iterasi hanya pada properti sendiri

Jika anda hanya ingin mempertimbangkan properti yang melekat pada objek itu sendri, dan bukan prototypes-nya, gunakan getOwnPropertyNames() atau lakukan hasOwnProperty() cek (propertyIsEnumerable juga dapat digunakan). Alternatifnya, jika anda tahu disana tidak ada campur tangan kode luar , anda dapat memperpanjang built-in prototypes dengan metode cek.

Contoh

Pada fungsi berikut menggunakan sebuah objek argumen. kemudian mengiterasi pada semua properti enumerable pada objek tersebut dan mengembalikan string dari nama properti dan nilainya.

var obj = {a:1, b:2, c:3};
    
for (var prop in obj) {
  console.log("obj." + prop + " = " + obj[prop]);
}

// Output:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"

Fungsi berikut mengiterasi menggunakan hasOwnProperty(): properti turunannya tidak akan di tampilkan.

var triangle = {a:1, b:2, c:3};

function ColoredTriangle() {
  this.color = "red";
}

ColoredTriangle.prototype = triangle;

var obj = new ColoredTriangle();

for (var prop in obj) {
  if( obj.hasOwnProperty( prop ) ) {
    console.log("obj." + prop + " = " + obj[prop]);
  } 
}

// Output:
// "obj.color = red"

Spesifikasi

Spesifikasi Status Komentar
ECMAScript 2017 Draft (ECMA-262)
The definition of 'for...in statement' in that specification.
Draft  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'for...in statement' in that specification.
Standard  
ECMAScript 5.1 (ECMA-262)
The definition of 'for...in statement' in that specification.
Standard  
ECMAScript 3rd Edition (ECMA-262)
The definition of 'for...in statement' in that specification.
Standard  
ECMAScript 1st Edition (ECMA-262)
The definition of 'for...in statement' in that specification.
Standard Initial definition.

Kompabilitas Browser

Fitur Chrome Firefox (Gecko) Internet Explorer Opera Safari
Dukungan dasar (Yes) (Yes) 10 (Yes) (Yes)
Fitur Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Dukungan dasar (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Kompabilitas: Ekspresi Initializer

Pada SpiderMonkey 40 (Firefox 40 / Thunderbird 40 / SeaMonkey 2.37) atau sebelumnya, bisa menggunakan ekspersi initializer (i=0) pada perulangan for...in :

var obj = {a:1, b:2, c:3};
for(var i=0 in obj) {
  console.log(obj[i]);
}
// 1
// 2
// 3

Perilaku non-standard ini sekarang diabaikan pada versi 40 dan selanjutnya akan disajikan dengan SyntaxError ("for-in loop head declarations may not have initializers") Peringatan pada konsole (bug 748550 dan bug 1164741).

Pada mesin lain seperti v8 (Chrome), Chakra (IE/Edge), dan JSC (WebKit/Safari) juga telah menyelidiki untuk menghapus perilaku non standar tersebut.

Lihat Juga

Tag Dokumen dan Kontributor

 Kontributor untuk laman ini: rmsubekti, haris
 Terakhir diperbarui oleh: rmsubekti,