ECMAScript İlişkisel Operatörler

İlişkisel işlev operatörleri karşılaştırma işlemleri gerçekleştirir. Her ilişkisel işlev operatörü bir Boolean değeri döndürür.

Geleneksel karşılaştırma yöntemi

İlişkisel işlev operatörleri (küçükten büyüğe, büyükten küçük, küçükten büyük eşit ve büyükten küçük eşit) iki sayının karşılaştırma işlemlerini gerçekleştirir, karşılaştırma yöntemi matematiksel karşılaştırma işlemleriyle aynıdır.

Her ilişkisel işlev operatörü bir Boolean değeri döndürür:

var bResult1 = 2 > 1	// doğru
var bResult2 = 2 < 1	// yanlış

Ancak, iki dizgeye ilişkisel işlev operatörü uygulandığında, davranışları farklıdır. Birçok kişi küçükten büyüğe "harf sırasında önde" anlamına gelir, büyükten küçüğe "harf sırasında arkada" anlamına gelir, ancak bu böyle değildir. Dizgeler için, ilk dizgedeki her karakterin kodu, ikinci dizgedeki karşılık gelen karakterin koduyla sayısal olarak karşılaştırılır. Bu karşılaştırma işlemi tamamlandıktan sonra, bir Boolean değeri döndürülür. Sorun, büyük harflerin kodlarının küçük harflerin kodlarından küçük olması, bu da aşağıdaki gibi durumlarla karşılaşılabilir:

var bResult = "Blue" < "alpha";
alert(bResult);	// doğru çıktı

Örnekteki gibi, "Blue" dizgesi "alpha" den küçük çünkü B harfinin karakter kodu 66, a harfinin karakter kodu 97'dir. Gerçek harf sırasına göre karşılaştırma sonuçlarını zorunlu olarak elde etmek için, iki sayıyı aynı büyük/küçük harf formuna (tam büyük harf veya tam küçük harf) dönüştürmeli ve ardından karşılaştırmalıyız:

var bResult = "Blue".toLowerCase() < "alpha".toLowerCase();
alert(bResult);	//Çıktı false

İki operanı küçük harfe dönüştürerek, "alpha"'ın "Blue"'dan önce harf sırasında doğru tanınmasını sağlar.

Sayı ve Dizi Karşılaştırması

İki dizgi numarası arasındaki karşılaştırmada başka bir zor durumda karşılaşılır, örneğin:

var bResult = "25" < "3";
alert(bResult);	//Çıktı "true"

Yukarıdaki kod, dizileri "25" ve "3" karşılaştırır. İki operan dizidir, bu yüzden karakter kodlarına göre karşılaştırılır ("2" karakter kodu 50, "3" karakter kodu 51).

Ancak, bir operan sayıya dönüştürülürse sonuç ilginç hale gelir:

var bResult = "25" < 3;
alert(bResult);	//Çıktı "false"

Burada, dizi "25" sayı 25'e dönüştürülür ve sayı 3 ile karşılaştırılır, sonuç bekleneni gibi.

Bir sayı ve bir dizi arasındaki karşılaştırmayı her zaman ECMAScript, diziyi sayıya dönüştürdükten sonra sayı sırasına göre karşılaştırır.

Ancak, bir dizi sayıya dönüştürülemezse ne olur? Aşağıdaki örneği göz önünde bulundurun:

var bResult = "a" < 3;
alert(bResult);

Bu kodun ne çıktısını bekleyebilirsiniz? Harf "a" anlamlı bir sayıya dönüştürülemez. Ancak, parseInt() yöntemine çağrıldığında NaN döndürür. Kurallara göre, NaN içeren herhangi bir ilişkisel işleç false döndürmelidir, bu yüzden bu kod da false çıktısı verir:

var bResult = "a" >= 3;
alert(bResult);

Genellikle, eğer küçükten büyüğe işlem iki değerin geri döndüğü false ise, büyük eşit işlemin doğru olarak true geri dönmelidir, ancak belirli bir sayı NaN ise durum böyle değil.