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.

let sayi1 = 12;
let sayi2 = -12;

alert(sayi1 > sayi2); // true
alert(sayi1 < sayi2); //false
alert(sayi1 > sayi1); //false
alert(sayi1 < sayi1); //false
alert(sayi1 >= sayi1); //true
alert(sayi1 <= sayi1); //true

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.

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)

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

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

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

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.

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

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.

== Değerler Eşit mi? | === Tipler ve Değerler Eşit mi?

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.

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.

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.

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.

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.

alert(null == '0'); //false (true vermesi beklenebilirdi.)
alert(null == 0); //false (true vermesi beklenebilirdi.)
alert(null >= 0); //true (false vermesi beklenebilirdi.)

alert(NaN === NaN); //false (true vermesi beklenmez.)
alert(undefined === NaN); //false (true vermesi beklenmez.)

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

Dahili Karşılaştırmalar

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

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.

let sayiOlmayan = NaN;
let sonsuz = Infinity;
let tamSayi = 10000000000000000; //

//isNaN kullanımları
alert( Number.isNaN(sayiOlmayan) ); // true (metot)
alert( isNaN(sayiOlmayan) ); // true (fonksiyon)

//isFinite
alert( Number.isFinite(sonsuz) ); // false

//isInteger
alert( Number.isInteger(tamSayi) ); // true

//isSafeInteger
alert( Number.isSafeInteger(tamSayi) ); // false - maxSafeInteger: 9007199254740991

.includes() | .endsWith() | .startsWith()

Bu karşılaştırmalar daha önce string konusunda işlenmiştir. Karşılaştırma sonucu olarak true false vermektedir.

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

Array.isArray() | instanceof

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

Last updated