# for .. in ile Nesnenin Özellikleri

Bir özelliğin bir nesne içindeki **varlığını `in`** deyimi ile sorgulayabiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
let ogrenci = {
    no:2301,
    isim:'Asya',
    sinif:7,
};
delete ogrenci.sinif;
alert( 'isim' in ogrenci ); //true
alert( 'notlar' in ogrenci ); //false
alert( 'sinif' in ogrenci ); // 6.satırda sildiğimiz için: false
```

{% endcode %}

Bu sorgulama  **`.hasOwnProperty()`** veya **`Object.hasOwn()`** ile de yapılabilir. Örnek.

{% code lineNumbers="true" %}

```javascript
alert( ogrenci.hasOwnProperty('no') ); //true
alert( Object.hasOwn(ogrenci,'isim') ); //true
alert( Object.hasOwn(ogrenci,'okul') ); //false
```

{% endcode %}

Nesnelerin anahtarları döngülenebilirler. Döngülenebilir yapılar **`for`**'un farklı kullanımlarıyla döngülenebilirler. Nesneler **`for ... in`** kullanımıyla döngülenebilirler. Örnek.

{% code lineNumbers="true" %}

```javascript
let user = { 
    takmaAd:'user',
    sifre:'1234',
    dil:'TR',
};
for (let ozellik in user) {
    alert(ozellik);
}
```

{% endcode %}

Eğer size değerler lazımsa şu şekilde kombinleyebilirsiniz.

{% code lineNumbers="true" %}

```javascript
let user = { 
    takmaAd:'user',
    sifre:'1234',
    dil:'TR',
};
for (let ozellik in user) {
    alert( user[ozellik] );
}
```

{% endcode %}

**`for ... in`** kullanımı özelliklerin eklenme sırasına göre çalıştırır fakat anahtarlar **`string`** tipinde nümerik değerlerle belirtilmişse işler değişir.

{% code lineNumbers="true" %}

```javascript
let numerics = { 
    '44':'kırkdört',
    '1':'bir',
    '34':'otuzdört',
};
for (let anahtar in numerics) {
    alert(anahtar);
}
```

{% endcode %}

Anahtarlar eklenme sırasına göre değil de sayısal olarak artan sırada gelir. Bu durum anahtarların **`for ... in`** kullanımında bellekte nümerik olarak çevriminden kaynaklanır. Önüne geçmek için **`string'`**&#x69;n önüne '+' vb. semboller konularak tip saflaştırılır.

{% code lineNumbers="true" %}

```javascript
let numerics = { 
    '+44':'kırkdört',
    '+1':'bir',
    '+34':'otuzdört',
};
for (let anahtar in numerics) {
    alert(anahtar);
}
```

{% endcode %}

Metotlar da yine **`for ... in`** döngüsü anahtar olarak gösterilir. Örnek.

{% code lineNumbers="true" %}

```javascript
let user = { 
    takmaAd:'user',
    sifre:'1234',
    dil:'TR',
    ozellikGoster() {
        for (let ozellik in this) {
            alert(ozellik);
        }
    }
};
user.ozellikGoster(); // en sonda ozellikGoster anahtarı görünecektir.
```

{% endcode %}
