---
title: 'Doğruluk Değerleri'
source: 'https://academia.sh/tr/kurslar/javascript-temelleri/dogruluk-degerleri'
course: 'JavaScript Temelleri'
language: tr
updated: '2026-08-17T18:09:49+00:00'
license: 'CC BY-SA 4.0'
---

# Doğruluk Değerleri

Mantıksal değere çevirme yordamı, yanlış sayılan sekiz değer, mantıksal işleçlerin değer döndürmesi, boşluk birleştirme ve isteğe bağlı zincirleme.

Önceki iki ders iki zorlama yordamını tanımladı: sayıya ve metne çevirme. Üçüncüsü,
mantıksal değere çevirme, koşullu yapıların temelidir ve iki derstir ertelenen bir soruyu
yanıtlar: `0` değeri neden eksik veri sanıldı?

Yordamın kendisi kısadır — sayfa dolusu kural yoktur, sekiz değerden oluşan bir liste
vardır. Asıl incelik listede değil, mantıksal işleçlerin bu listeyi nasıl kullandığındadır.

## Yanlış Sayılan Sekiz Değer

Mantıksal değere çevirme yordamı bir liste ile tanımlıdır: aşağıdaki sekiz değer
**yanlış sayılır (falsy)**, diğer her değer doğru sayılır.

```js
const yanlisSayilanlar = [
  ["false", false],
  ["0", 0],
  ["-0", -0],
  ["0n", 0n],
  ['""', ""],
  ["null", null],
  ["undefined", undefined],
  ["NaN", NaN],
];

for (const [etiket, deger] of yanlisSayilanlar) {
  console.log(etiket.padEnd(10), Boolean(deger));
}
```

```
false      false
0          false
-0         false
0n         false
""         false
null       false
undefined  false
NaN        false
```

Liste kapalıdır: burada olmayan hiçbir değer yanlış sayılmaz. Bu, listeyi ezberlemekten
daha kullanışlı bir kuraldır, çünkü sezgiye aykırı örnekleri doğrudan çözer:

```js
console.log(Boolean("0"), Boolean("false"), Boolean(" "));
console.log(Boolean([]), Boolean({}));
console.log(Boolean(-1), Boolean(Infinity));
```

```
true true true
true true
true true
```

Boş olmayan her dizgi doğru sayılır — içeriği ne olursa olsun. `"0"` ve `"false"`
metinleri de bu kurala girer; sayıya veya mantıksal değere çevrilmezler. Boş dizi ve boş
nesne de doğru sayılır: nesneler listede yoktur, bu yüzden hepsi doğrudur. Sıfır dışındaki
her sayı, negatifler ve sonsuzluk dahil, doğru sayılır.

Bir noktaya dikkat: `Boolean([])` doğru verirken, önceki dersteki `[] == false`
karşılaştırması doğru vermişti. Çelişki yoktur — iki farklı yordam çalışıyor. Gevşek
eşitlik diziyi ilkel değere, sonra sayıya çevirir; mantıksal değere çevirme ise nesnenin
içine hiç bakmaz. Aynı değerin iki farklı bağlamda farklı sonuç vermesi, hangi yordamın
çağrıldığını bilmeyi zorunlu kılar.

## Mantıksal İşleçler Mantıksal Değer Döndürmez

`&&` ve `||` işleçleri, adlarına rağmen `true` veya `false` üretmez. **İşlenenlerden
birini** döndürürler:

```js
console.log(0 || "yedek");
console.log("A1" || "yedek");
console.log(0 && "asla");
console.log("A1" && 21.5);
```

```
yedek
A1
0
21.5
```

Kural şöyledir. `||` işleci sol işleneni değerlendirir; doğru sayılıyorsa onu döndürür,
değilse sağ işleneni döndürür. `&&` işleci sol işleneni değerlendirir; yanlış sayılıyorsa
onu döndürür, değilse sağ işleneni döndürür.

Sağ işlenen yalnızca gerektiğinde değerlendirilir. Programlama Temelleri kursundaki
İşleçler ve İfadeler dersinde tanımlanan kısa devre değerlendirme budur. Üçüncü satırda
`"asla"` hiç değerlendirilmedi.

Sonucu mantıksal tipe zorlamak gerekiyorsa dönüşüm açıkça yazılır. Koşullu yapılar zaten
mantıksal değere çevirdiği için bu genellikle gereksizdir.

## Varsayılan Değer Tuzağı

`||` işlecinin en yaygın kullanımı eksik değere yedek koymaktır. Bu kullanım, yanlış
sayılan değerler geçerli veri olduğunda bozulur:

```js
const kayitlar = [
  { istasyon: "A1", sicaklik: 21.5 },
  { istasyon: "A2", sicaklik: 0 },
  { istasyon: "B1" },
];

for (const k of kayitlar) {
  const veyaIle = k.sicaklik || -273.15;
  const bosIle = k.sicaklik ?? -273.15;
  console.log(k.istasyon, "|| ->", veyaIle, " ?? ->", bosIle);
}
```

```
A1 || -> 21.5  ?? -> 21.5
A2 || -> -273.15  ?? -> 0
B1 || -> -273.15  ?? -> -273.15
```

Orta satır, iki derstir açık bırakılan sorunun yanıtıdır. `A2` istasyonunun sıcaklığı
`0`'dır; bu geçerli bir ölçümdür ve kayıtta vardır. Yine de `||` işleci onu yanlış saydı
ve yedek değere geçti. Ölçüm, mutlak sıfır sıcaklığına dönüştü.

Alt satırdaki `B1` kaydında ise sıcaklık alanı gerçekten yoktur; `k.sicaklik` değeri
`undefined`'dır ve yedek değere geçmesi doğrudur. İki satır aynı sonucu üretti, ama
yalnızca biri istenen davranıştı — `||` işleci "değer yok" ile "değer sıfır" durumlarını
ayırt edemez.

`??` işleci — **boşluk birleştirme (nullish coalescing)** — yalnızca `null` ve
`undefined` değerlerinde sağ işlenene geçer:

```js
console.log(0 || "yedek");
console.log(0 ?? "yedek");
console.log("" || "yedek");
console.log("" ?? "yedek");
console.log(null ?? "yedek");
```

```
yedek
0
yedek

yedek
```

Dördüncü satırın boş görünmesi, `??` işlecinin boş dizgiyi geçerli bir değer sayıp
döndürmesindendir. İkinci satır ise `0` değerini korudu.

Seçim kuralı nettir: **"değer verilmemişse" anlamı isteniyorsa `??`, "değer yanlış
sayılıyorsa" anlamı isteniyorsa `||` kullanılır.** Ölçüm verisinde sıfır, boş dizgi ve
`false` çoğu zaman geçerli değerlerdir; bu yüzden varsayılan atamaları `??` ile yazılır.

## İsteğe Bağlı Zincirleme

Aynı ailenin üçüncü işleci, iç içe alanlara erişirken yokluk denetimini kısaltır:

```js
const kayit = { istasyon: "A1", konum: { yukseklik: 120 } };
const eksik = { istasyon: "B1" };
console.log(kayit.konum?.yukseklik);
console.log(eksik.konum?.yukseklik);
console.log(eksik.konum?.yukseklik ?? 0);
```

```
120
undefined
0
```

`?.` işleci, solundaki değer `null` veya `undefined` ise zinciri keser ve `undefined`
döndürür; değilse erişimi sürdürür. Denetimin ölçütü `??` ile aynıdır — yanlış sayılan
değerler değil, yalnızca iki yokluk değeri.

İşleç olmadan aynı erişim hata verir:

```js
const eksik = { istasyon: "B1" };
try {
  console.log(eksik.konum.yukseklik);
} catch (hata) {
  console.log(hata.name + ": " + hata.message);
}
```

```
TypeError: Cannot read properties of undefined (reading 'yukseklik')
```

Kod Çalıştırma Yolları dersinde bu iletinin nasıl okunacağı gösterilmişti: sorun
`yukseklik` alanında değil, `eksik.konum` değerinin `undefined` olmasındadır.

İsteğe bağlı zincirleme dikkatli kullanılmalıdır. Bir alanın eksik olması beklenen bir
durumsa doğru araçtır; beklenmeyen bir durumsa, hatayı bastırıp sorunu ileriye taşır.
Aradaki fark verinin sözleşmesindedir, sözdiziminde değil.

## Ölçüm Betiğine Uygulama

Doğruluk değerlerinin en kısa kullanımı süzme işlemidir:

```js
const alanlar = ["21.5", "", "0", "abc", null];
const dolular = alanlar.filter(Boolean);
console.log(dolular);
```

```
[ '21.5', '0', 'abc' ]
```

Boş dizgi ve `null` elendi; `"0"` metni korundu, çünkü boş olmayan bir dizgidir. Bu tam
olarak istenen davranıştır: burada süzülen şey ham metindir, sayısal değer değil.

Sayısal değerlere aynı süzgeci uygulamak ise veri kaybettirir:

```js
const olcumler = [21.5, 0, NaN, 19.75];
console.log(olcumler.filter(Boolean));
console.log(olcumler.filter((d) => !Number.isNaN(d)));
```

```
[ 21.5, 19.75 ]
[ 21.5, 0, 19.75 ]
```

İlk süzgeç geçerli bir sıfır ölçümünü attı. İkincisi yalnızca gerçekten geçersiz olanı
attı. Kural, doğruluk değerlerinin genel bir geçerlilik ölçütü olmamasıdır: neyin geçerli
sayıldığı verinin anlamına bağlıdır ve açıkça yazılmalıdır.

## Özet

- Mantıksal değere çevirme sekiz değeri yanlış sayar: `false`, `0`, `-0`, `0n`, boş
  dizgi, `null`, `undefined`, `NaN`. Diğer her değer doğru sayılır.
- Boş dizi, boş nesne ve `"0"` gibi metinler doğru sayılır; nesneler listede yoktur.
- `&&` ve `||` mantıksal değer değil, işlenenlerden birini döndürür ve sağ işleneni
  yalnızca gerektiğinde değerlendirir.
- `||` sekiz değerin tamamında yedeğe geçer; `??` yalnızca `null` ve `undefined`
  durumunda geçer. Ölçüm verisinde varsayılan atamaları `??` ile yazılır.
- `?.` zinciri yalnızca `null` ve `undefined` değerlerinde keser; beklenmeyen eksikliği
  gizlemek için kullanılmamalıdır.

## Sonraki Adım

Değer modeli tamamlandı: hangi tipler var, nasıl dönüşüyorlar, nasıl karşılaştırılıyorlar
ve koşulda nasıl değerlendiriliyorlar. Sıra bu değerlerle program akışı kurmakta. Sonraki
konu koşullu seçimle başlayacak: `if` zincirleri, üçlü işleç ve `switch` deyiminin
karşılaştırma için hangi eşitliği kullandığı — bu dersteki üç işleçten biri.
