# Array - Dizi

Bir **`array`** nesnesi tanımlamak için köşeli parantezler ( **`[]`** ) kullanılır ve her bir değerin (value) arasına virgül ( **`,`** ) konur. Örnek.

{% code lineNumbers="true" %}

```javascript
let gunler = ['Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi','Pazar'];
alert ( typeof(gunler) ); //object çıktısı verir ve dizi nesnesidir.
alert(gunler);
```

{% endcode %}

**`Array`**'lerin içerisindeki değerler farklı veri tiplerinde olabilir. Doğrudan bir değer yerine bir değişkeni de tutabilirler. Örnek.

{% code lineNumbers="true" %}

```javascript
let str = 'Karakter Dizisi';
let veriTipleri = [str, 2023, true, ['Başka', 1, 'array']];
alert(veriTipleri);
```

{% endcode %}

**`Array`**'in uzunluğu dizi nesnesinin **`.length`** anahtarı ile dizi uzunluğu ile elde edilir.

{% code lineNumbers="true" %}

```javascript
let gunler = ['Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi','Pazar'];
alert ( gunler.length ); // 7 çıktısı verir.
```

{% endcode %}

**`Array`**'deki değerler **tamsayı artan sıralıdır**. **İlk sıra 0. indisten başlar**. **`Array`**'lerin değerlerine sırayla şu şekilde erişilir.

{% code lineNumbers="true" %}

```javascript
let gunler = [
  'Pazartesi', //0.indis
  'Salı', //1.indis
  'Çarşamba', //2.indis
  'Perşembe', //3.indis
  'Cuma', //4.indis
  'Cumartesi', //5.indis
  'Pazar' //6.indis
];
alert( gunler[0] ); // indisi değiştirerek kontrol ediniz.
```

{% endcode %}

**`.at()`** metodu ile de değerlere erişilebilir.

{% code lineNumbers="true" %}

```javascript
let ulkeler = [
  ['Türkiye', 'Ankara',1923], // 0.indis
  ['KKTC', 'Lefkoşa',1983 ], // 1.indis
  ['Azerbaycan', 'Bakü',1991] // 2.indis
];
alert( ulkeler.at(0) ); // indisi değiştirerek kontrol ediniz.
```

{% endcode %}

**`Array`**'de indisi ile eriştiğimiz bir değeri değiştirebiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
let dizi = ['Pazartesi', 'Salı', 'Çarşamba'];
dizi[0] = 'Ocak'; //0.indisteki elemanı 'Ocak' ile değiştirdik.
dizi[1] = 'Şubat'; //1.indisteki elemanı 'Şubat' ile değiştirdik.
dizi[2] = 'Mart'; //2.indisteki elemanı 'Mart' ile değiştirdik.
alert(dizi);
```

{% endcode %}

**`Array`** nesnesinin boyutu dinamiktir bu sayede istediğimiz indise değer ekleyebiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
let dizi = ['Pazartesi', 'Salı', 'Çarşamba'];
dizi[4] = 'Cuma'; //4.indise 'Cuma' değerini ekledik.
dizi[5] = 'Cumartesi'; //5.indise 'Cumartesi' değerini ekledik.
alert(dizi);
```

{% endcode %}

Yukarıdaki örnekte 3.indisi atladık. Peki 3.indiste ne oluştu?

{% code lineNumbers="true" %}

```javascript
let dizi = ['Pazartesi', 'Salı', 'Çarşamba'];
dizi[4] = 'Cuma'; //4.indise 'Cuma' değerini ekledik.
dizi[5] = 'Cumartesi'; //5.indise 'Cumartesi' değerini ekledik.
alert( dizi[3] ); // undefined çıktısı verir.
alert(dizi); //Pazartesi,Salı,Çarşamba,,Cuma,Cumartesi
//3.indis mevcuttur, yeri ayrılmıştır.
```

{% endcode %}

Bu yöntemle değer eklemek için ekleyeceğimiz indisi bilmek gerekir. Aksi takdirde var olan bir değeri değiştirip üzerine yazabilir ve veriyi kaybedebiliriz. Bu sebeple zahmetlidir.

Değerlere sırayla erişmeyi **`string`** tipinde de kullanmıştık. Fakat **`string`** tipinde indis ile eriştiğiniz değeri değiştiremez veya silemezsiniz. (İlkel tiplerin hafıza birimlerinin boyutu belirlidir.)

&#x20;Negatif bir indis verirseniz herhangi bir hata vermez fakat diziye de eklenmez.

{% code lineNumbers="true" %}

```javascript
let dizi = ['Pazartesi', 'Salı', 'Çarşamba'];
dizi[-1] = 'Perşertesi'; //-1.indes yok, ekleyemez, hata vermez.
alert(dizi);
```

{% endcode %}

**`Array`**'lerden değer silmenin yöntemi **`delete`** komutu değildir. Bu yöntemle değer **silinemez** sadece değeri **`undefined`** olarak atanır. Örnek.

{% code lineNumbers="true" %}

```javascript
let gunler = ['Pazartesi', 'Salı', 'Çarşamba'];
delete gunler[1];
alert(gunler); // 'Pazartesi,,Çarşamba' çift virgülü farkediniz.
```

{% endcode %}

## Dizi Kontrolü

> **`Array.isArray()`**

Tüm **`object`** türlerinin tipinin **`object`** olduğunu ifade etmiştik. **`Object`** tipinde farklı türler bir arada olduğu için **`object`** bir değerin **`array`** dizisi olduğunu kontrol etmek için **`Array.isArray()`** fonksiyonu kullanılır. Örnek.

{% code lineNumbers="true" %}

```javascript
let harfler = ['A','B','C','D'];
let str = 'ABCD';
alert( Array.isArray(harfler) ); // true
alert( Array.isArray(str) ); // false
```

{% endcode %}

## Dizi Türüne Dönüştürme

> **`Array.from()`**  | **`Array()`**

**`String`** bir değer veya değişken **`array`** türüne **`Array.from()`** fonksiyonu ile dönüştürülebilir. Örnek.

{% code lineNumbers="true" %}

```javascript
let dizi = Array.from('JAVASCRIPT');
alert(dizi); // J,A,V,A,S,C,R,I,P,T
alert( Array.isArray(dizi) );
```

{% endcode %}

Değerin tipinin **`string`** olması bir gerekliliktir. Örnek.

{% code lineNumbers="true" %}

```javascript
let sayi = 123, // nummber tipi array'a dönüşemez.
    dizi = Array.from(sayi);
alert(dizi); // boş çıktı alınır, elemanları yoktur.
alert( Array.isArray(dizi) ); // true verir fakat elemanları yoktur.
```

{% endcode %}

Bununla birlikte bir **`string`**'i dilimlemeden tek bir eleman olarak **`array`** yapmak isterseniz **`Array()`** fonksiyonunu kullanabilirsiniz. Örnek.

{% code lineNumbers="true" %}

```javascript
let dizi = Array('JAVASCRIPT');
alert(dizi); // Tek eleman 'JAVASACRIPT'
alert( Array.isArray(dizi) );
```

{% 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/array-dizi.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.
