> 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.
