> For the complete documentation index, see [llms.txt](https://hanuce.gitbook.io/javascript-egitimi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hanuce.gitbook.io/javascript-egitimi/referans-reference-veri-tipleri/object-nesne.md).

# Object - Nesne

**`Object`** veri tipinin bölümleri:

<img src="/files/iGSu3O4PHu8GJJUrsIIR" alt="" class="gitbook-drawing">

**`Object`** 'ler süslü parantezler (**`{}`**) ile oluşturulurlar. Her obje "***anahtar:değer***" ikililerinden oluşur. **`Object`** türünde **anahtarlar sadece `string` tipinde** olabilirler.

**`Object`**'lerin anahtarları özellik (property) veya nitelik (attribute) olarak da ifade edilmektedirler.

Bir nesne oluşturalım.

{% code lineNumbers="true" %}

```javascript
let ogrenci = { //nesne adı 'ogrenci'
    no:2301, // anahtar adı 'no' değeri 2301
    isim:'Asya', // anahtar adı 'isim' değeri 'Asya'
    soyisim:'KARA', // anahtar adı 'soyIsim' değeri 'KARA'
    sinif:7, // anahtar adı 'sinif' değeri 7
};
alert(ogrenci); //çıktı: [object Object]
alert( typeof(ogrenci) ); // object
```

{% endcode %}

{% hint style="info" %}
**`Object`** türünde anahtarlar isimlendirilirken değişken isimlendirme kurallarında olduğu gibi dikkat edilir. Farklı olarak dile ait deyimler (let, const, if, for ... vb.) de anahtar olarak kullanılabilir. Hata vermez. Örnek.

{% code lineNumbers="true" %}

```javascript
let deyimler = {
    if:'if Deyimi',
    for:'for Deyimi',
    let:'let Deyimi',
    var:'var Deyimi',
};
```

{% endcode %}
{% endhint %}

**`ogrenci`** nesnesi bir adres hiyerarşisini referans ettiği için **`alert(ogrenci);`** ile doğrudan değerlere erişilemez. Değerlere anahtarları üzerinden erişilebilir. Örnek.

{% code lineNumbers="true" %}

```javascript
alert(ogrenci.no);
alert(ogrenci.isim);
alert(ogrenci.soyisim);
alert(ogrenci.sinif);
```

{% endcode %}

Bu erişim köşeli parantez **`[]`** kullanılarak da yapılabilir. Örnek.

{% code lineNumbers="true" %}

```javascript
alert( ogrenci['no'] );
alert( ogrenci['isim'] );
alert( ogrenci['soyisim'] );
alert( ogrenci['sinif'] );
```

{% endcode %}

**Köşeli parantez kullanımı güçlüdür.** Değişkenler veya değerler ile erişmeye olanak sağlar. Örnek.

{% code lineNumbers="true" %}

```javascript
let ozellik = prompt('Göstermek istediğiniz özelliği giriniz',0);
alert( ogrenci[ozellik] );
//veya
alert( ogrenci['sinif'] );
// şeklinde de kullanılabilir
```

{% endcode %}

Yukarıdaki örneğe bakarak "***Öğrenci nesnesinin 4 özelliği vardır.***" ifadesini kullanabiliriz. Nesnelerin anahtarları genellikle **özellik** olarak ifade edilir.

Bir özelliği sabit bir **`string`** yerine değişken ile belirlemek istiyorsanız yine köşeli parantezler kullanmalısınız. Anahtar isminde köşeli parantez kullanınca yazdığınız ifade değerlendirilir. Buna '**Hesaplanmış Özellik**' denir. Örnek.

{% code lineNumbers="true" %}

```javascript
let ozellik = prompt('Eklemek istediğiniz özelliği giriniz',0);
let deger = prompt('Eklemek istediğiniz değeri giriniz',0);
let ogrenci = {
    no:2023,
    isim:'Asya',
    [ozellik]:deger
};
alert( `${ozellik} : ${ogrenci[ozellik]}` );
```

{% endcode %}

Hesaplanmış özelliklerde **`string`** operatörler de kullanabilirsiniz. Örnek.

{% code lineNumbers="true" %}

```javascript
let ozellik = prompt('Eklemek istediğiniz özelliği giriniz',0);
let deger = prompt('Eklemek istediğiniz değeri giriniz',0);
let ogrenci = {
    no:2023,
    isim:'Asya',
    ['yeniOzellik_' + ozellik]:deger
};
alert( `${'yeniOzellik_' + ozellik} : ${ogrenci['yeniOzellik_' + ozellik]}` );
```

{% endcode %}

Bir nesneye sonradan yeni özellikler eklenebilir veya var olan özellikler **`delete`** deyimi ile silinebilir. Örnek.

{% code lineNumbers="true" %}

```javascript
let ogrenci = {
    no:2301,
    isim:'Asya',
    sinif:7,
};
ogrenci.sube = 'A'; // sube özelliği ekledik ve değerini 'A' atadık.
alert(ogrenci.sube);
delete ogrenci.sinif; // sinif özellğini sildik.
alert(ogrenci.sinif); // undefined çıktısı verir.
```

{% endcode %}

Özellik eklemeyi köşeli parantezle de yapılabilirsiniz. Örnek.

{% code lineNumbers="true" %}

```javascript
let ogrenci = {
    no:2301,
    isim:'Asya',
    sinif:7,
};
ogrenci['sube'] = 'A'; // sube özellği ekledik ve değerini 'A' atadık.
alert(ogrenci.sube);
```

{% endcode %}

Nesneleri boş olarak oluşturup sonrasında anahtar (özellik) ekleyebilirsiniz. Örnek.

{% code lineNumbers="true" %}

```javascript
let nesne = {};
nesne.key1 = 'Özellik-1';
nesne.key2 = 'Özellik-2';
alert(nesne.key1);
```

{% endcode %}

Nesnelerdeki anahtarların değerleri başka bir nesne olabilir. Örnek.

{% code lineNumbers="true" %}

```javascript
let nesneler = {
    nesne1:{
        d1:'Nesne-1 Özellik-1',
        d2:'Nesne-1 Özellik-2'
    },
    nesne2:{
        d1:'Nesne-2 Özellik-1',
        d2:'Nesne-2 Özellik-2'
    },
};
alert(nesneler.nesne1); // [object Object] çıktısı alınır.
alert(nesneler.nesne1.d1); // 'Nesne-1 Özellik-1' çıktısı alınır.
```

{% endcode %}
