# 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hanuce.gitbook.io/javascript-egitimi/referans-reference-veri-tipleri/object-nesne.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
