> 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/operatorler/karsilastirma-operatorleri.md).

# Karşılaştırma Operatörleri

Karşılaştırma operatörlerinden büyüktür, küçüktür vb. matematiksel olanları zaten biliyorsunuzdur. Programlama dillerindeki karşılaştırma işlemlerinin hepsinin sonucu **`true`** veya **`false`** olarak döner. Yani **`Boolean`** tipindedir. Şimdi karşılaştırmaları ele alalım.

## İlişkisel Karşılaştırmalar ( `<`, `>`, `=`, `!` )

Bu karşılaştırmalarda **`<`**, **`>`**, **`=`**, **`!`** sembolleri kullanılır. Büyüktür, küçüktür, eşittir gibi karşılaştırmalardır. Örnek.

<pre class="language-javascript" data-line-numbers><code class="lang-javascript">let sayi1 = 12;
let sayi2 = -12;
<strong>
</strong>alert(sayi1 > sayi2); // true
alert(sayi1 &#x3C; sayi2); //false
alert(sayi1 > sayi1); //false
alert(sayi1 &#x3C; sayi1); //false
alert(sayi1 >= sayi1); //true
alert(sayi1 &#x3C;= sayi1); //true
</code></pre>

Değerlerin sayı tipinde olmasına gerek yoktur. **Sayısal değerler farklı tipte olsalar da değerleri üzerinden karşılaştırılırlar.**

{% code lineNumbers="true" %}

```javascript
alert('15' > '25'); // false
alert(25 > '15'); // true
alert('15' > '25'); // false
alert(true > false); //true (Boolean true=1 false=0)
alert(false > true); //false (Boolean true=1 false=0)
```

{% endcode %}

Javascript'te karakterler Unicode Karakter Kodlaması'na göre bit değerleri üzerinden karşılaştırılır. Örneğin:

| Harf | Unicode | UTF-16 |
| ---- | ------- | ------ |
| a    | U+0061  | 0x0061 |
| A    | U+0041  | 0x0041 |

Karakter dizisi sırayla ilk karakterden başlanarak karşılaştırılır. Bu tabloya göre karşılaştırmalar yapalım.

{% code lineNumbers="true" %}

```javascript
alert('a' > 'A'); // true
alert('TRa' > 'TRA'); //true
alert('TRK' > 'TRKS'); //false
```

{% endcode %}

Aynı sonuç çünkü 'TR' karakterleri ikisinde de aynı olduğu için sonuç çıkana kadar karakterleri kontrol etmeye devam eder. Sayısal olmayan değerler ile sayısal olanları karşılaştırıldığında sayısal olmayanlar **`NaN`** değerine çevrildiği için tüm karşılaştırmalar **`false`** olarak çıkar.

{% code lineNumbers="true" %}

```javascript
alert('a' > 1); // false
alert('a' < 1); // false
```

{% endcode %}

Eşitlik karşılaştırmaları iki veya üç **`=`** sembolü ile yapılır. **`==`** sembolü ile sadece değer, **`===`** sembolü ile hem tip hem de değer karşılaştırması yapılır.  Üç **`=`** sembolü ile yapılan karşılaştırmalar sıkı karşılaştırmalardır. Tek **`=`** sembolü atama operatörüdür karşılaştırma yapmaz. Örnek.

{% hint style="info" %}
**`==`** ***Değerler Eşit mi?*** | **`===`** ***Tipler ve Değerler Eşit mi?***
{% endhint %}

<pre class="language-javascript" data-line-numbers><code class="lang-javascript">alert(0 == '0'); //true - Eşit mi? Evet değerler eşit.
alert(0 == 0); //true - Eşit mi? Evet değerler eşit.
alert(0 == false); //true - Eşit mi? Evet değerler eşit.
alert(0 == ''); //true - Eşit mi? Evet değerler eşit.
<strong>
</strong>alert(0 === '0'); //false - Eşit mi? Hayır tipler eşit değil.
alert(0 === 0); //true - Eşit mi? Evet tipler ve değerler eşit.
alert(0 === false); //false - Eşit mi? Hayır tipler eşit değil.
alert(0 === ''); //false - Eşit mi? Hayır tipler eşit değil.
</code></pre>

Eşitsizlik (Eşit Değil mi?) karşılaştırmaları da iki şekilde yapılır. **`!=`** sembolü ile sadece değer **`!==`** sembolü ile hem tip hem de değer karşılaştırması yapılır. Örnek.

{% code lineNumbers="true" %}

```javascript
alert(0 != 0 ); //false - Eşit değil mi? Hayır değerler eşit.
alert(0 != '0'); //false - Eşit değil mi? Hayır değerler eşit.
alert(0 !== '0'); //true - Eşit değil mi? Evet tipler eşit değil.
alert(0 !== 0); //false - Eşit değil mi? Hayır tipler ve değerler eşit.
```

{% endcode %}

**`Undefined`, `Null` ve `NaN` değerlerinin karşılaştırmaları** beklenmeyen sonuçlar verebilir. **`Undefined`** değeri karşılaştırmalarda **`NaN`** değerine döner, **`Null`** değeri ise **`0`** değerine döner. **`NaN`** ile yapılan **bütün karşılaştırmaların `false` sonucunu vereceğini unutmayınız.**

<pre class="language-javascript" data-line-numbers><code class="lang-javascript">alert(null == '0'); //false (true vermesi beklenebilirdi.)
alert(null == 0); //false (true vermesi beklenebilirdi.)
alert(null >= 0); //true (false vermesi beklenebilirdi.)
<strong>
</strong>alert(NaN === NaN); //false (true vermesi beklenmez.)
alert(undefined === NaN); //false (true vermesi beklenmez.)
</code></pre>

Bu sebeple sıkı karşılaştırma olan **`===`** operatörünü kullanmanız önerilir.

## Dahili Karşılaştırmalar

{% hint style="info" %}

```
Number.isNaN() | isNaN() | Number.isFinite()
Number.isInteger() | Number.isSafeInteger()
```

{% endhint %}

Dahili karşılaştırmalar dilde fonksiyon veya metotlarla yaptığımız karşılaştırmadır. Örneğin **`NaN`**, **`Infinity`**, **`Integer`** vb. değerlerini kontrol etmemizi sağlayan metot veya fonksiyonlar vardır. Örnek.

<pre class="language-javascript" data-line-numbers><code class="lang-javascript">let sayiOlmayan = NaN;
let sonsuz = Infinity;
let tamSayi = 10000000000000000; //
<strong>
</strong>//isNaN kullanımları
alert( Number.isNaN(sayiOlmayan) ); // true (metot)
alert( isNaN(sayiOlmayan) ); // true (fonksiyon)
<strong>
</strong>//isFinite
alert( Number.isFinite(sonsuz) ); // false
<strong>
</strong>//isInteger
alert( Number.isInteger(tamSayi) ); // true
<strong>
</strong>//isSafeInteger
alert( Number.isSafeInteger(tamSayi) ); // false - maxSafeInteger: 9007199254740991
</code></pre>

{% hint style="info" %}
.includes() | .endsWith() | .startsWith()
{% endhint %}

Bu karşılaştırmalar daha önce [string](/javascript-egitimi/ilkel-primitive-veri-tipleri/string-karakter-dizisi.md) konusunda işlenmiştir. Karşılaştırma sonucu olarak **`true`** **`false`** vermektedir.

{% code lineNumbers="true" %}

```javascript
let misra = 'Ben ezelden beridir hür yaşadım, hür yaşarım.';
alert( misra.includes('hür'); //true
alert( misra.endsWith('.'); //true
alert( misra.startsWith('Ben'); //true
```

{% endcode %}

{% hint style="info" %}
Array.isArray() | instanceof
{% endhint %}

Bu karşılaştırmalar yine **`true`** **`false`** sonuç veren dahili karşılaştırmalardır. Referans Veri Tipleri konusu ile işlenecektir.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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/operatorler/karsilastirma-operatorleri.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.
