Mantıksal operatörler genellikle Boolean
(mantıksal) değerleri ile kullanılır. Kullanıldıklarında, bir boolean değer döndürürler. Ancak, &&
ve ||
operatörleri aslında belirtilmiş olan operandlardan birinin değerini döndürür, bu sebeple eğer bu operatörler Boolean olmayan değerler ile kullanılırsa, Boolean olmayan değerler üretebilirler.
Açıklama
Mantıksal operatörler aşağıdaki tabloda açıklanıyor:
Operatör | Kullanım | Açıklama |
---|---|---|
Mantıksal VE (&& ) |
expr1 && expr2 |
Eğer expr1 false değerine dönüştürülebilirse, expr1 döndürülür. Aksi halde, expr2 döndürülür. Böylece, Boolean değerleri ile kullanıldıklarında, && her iki operand true ise true ; aksi halde, false döndürür. |
Mantıksal YA DA (|| ) |
expr1 || expr2 |
Eğer expr1 true değerine dönüştürülebilirse, expr1 döndürülür, aksi halde, expr2 döndürülür. Böylece, Boolean değerleri ile kullanıldıklarında, || her iki operanddan herhangi biri true ise true döndürür. |
Mantıksal DEĞİL (! ) |
!expr |
Eğer operandın değeri true is false döndürür, aksi alde true döndürür. |
Eğer bir değer true
değerine dönüştürülebiliyorsa, ona truthy ismi verilir. Eğer bir değer false
değerine dönüştürülebiliyorsa, ona falsy denir.
False
değerine dönüştürülebilen ifadelere örnekler:
null
;NaN;
0
;- boş string (
""
); undefined
.
&& ve || operatörleri Boolean
olmayan değerler ile kullanılabiliyor olmasına rağmen, döndürdükleri değerler her zaman Boolean
değerlerine çevirilebildiğinden, halen Boolean
operatörleri olarak düşünülebilirler.
Kısa-devre değerlendirmeleri
Mantıksal operatörler soldan sağa çalıştırıldıkları gibi, mümkünse aşağıdaki kurallar kullanılarak "kısa devre" testine tabi tutulurlar:
false && (herhangi)
bir kısa devre, false değerine çevrilir.true || (herhangi)
bir kısa devre, true değerine çevrilir.
Mantık kuralları bu değerlendirmelerin doğruluğunu garantiler. Yukarıdaki ifadelerin tümünün çalıştırılmayacağına, bu sebeple hepsinin yan etkisinin olmayacağına dikkat edin. Ayrıca yukarıdaki ifadenin (herhangi)
kısmının tamamıyla bir mantıksal ifadeye eşit olduğuna dikkat edin. (parantezler ile gösterildiği gibi).
Örneğin, aşağıdaki iki fonksiyon birbirinin aynısıdır.
function shortCircuitEvaluation() {
doSomething() || doSomethingElse()
}
function equivalentEvaluation() {
var flag = doSomething();
if (!flag) {
doSomethingElse();
}
}
Ancak, aşağıdaki ifadeler operatör önceliğine göre eşit değildir ve sağ el operatörünün tek bir ifade olmasının önemini vurgular (gerekirse parantezler ile gruplanır).
false && true || true // returns true
false && (true || true) // returns false
Mantıksal VE (&&
)
Aşağıdaki kod && (mantıksal VE) operatörüyle ilgili örnekleri gösterir.
a1 = true && true // t && t returns true
a2 = true && false // t && f returns false
a3 = false && true // f && t returns false
a4 = false && (3 == 4) // f && f returns false
a5 = "Cat" && "Dog" // t && t returns "Dog"
a6 = false && "Cat" // f && t returns false
a7 = "Cat" && false // t && f returns false
a8 = "" && false // returns ""
a9 = false && || // returns false
Mantıksal YA DA (||
)
Aşağıdaki kod || (mantıksal YA DA) operatörüyle ilgili örnekleri gösterir.
o1 = true || true // t || t returns true
o2 = false || true // f || t returns true
o3 = true || false // t || f returns true
o4 = false || (3 == 4) // f || f returns false
o5 = "Cat" || "Dog" // t || t returns "Cat"
o6 = false || "Cat" // f || t returns "Cat"
o7 = "Cat" || false // t || f returns "Cat"
o8 = "" || false // returns false
o9 = false || "" // returns ""
Mantıksal DEĞİL (!
)
Aşağıdaki kod ! (mantıksal DEĞİL) operatörüyle ilgili örnekleri gösterir.
n1 = !true // !t returns false
n2 = !false // !f returns true
n3 = !"Cat" // !t returns false
Dönüşüm kuralları
VE operatörünü YA DA operatörüne dönüştürmek
Booleanları içeren aşağıdaki ifade:
bCondition1 && bCondition2
her zaman şuna eşittir:
!(!bCondition1 || !bCondition2)
YA DA operatörünü VE operatörüne çevirmek
Booleanları içeren aşağıdaki ifade:
bCondition1 || bCondition2
her zaman şuna eşittir:
!(!bCondition1 && !bCondition2)
DEĞİL operatörleri arasında dönüşüm yapmak
Booleanları içeren aşağıdaki ifade:
!!bCondition
her zaman şuna eşittir:
bCondition
İç içe geçmiş parantezleri kaldırmak
Mantıksal operatörlerin soldan sağa değerlendirilmesi durumunda, kompleks bir ifadeden parantezleri bazı kuralları takip ederek kaldırmak mümkündür.
İç içe geçmiş VE operatörünü kaldırmak
Aşağıda, Boolean içeren bu bileşik işlem:
bCondition1 || (bCondition2 && bCondition3)
her zaman şuna eşittir:
bCondition1 || bCondition2 && bCondition3
İç içe geçmiş YA DA operatörünü kaldırmak
Aşağıda, Boolean içeren bu bileşik ifade:
bCondition1 && (bCondition2 || bCondition3)
her zaman şuna eşittir:
!(!bCondition1 || !bCondition2 && !bCondition3)
Özellikler
Özellik | Durum | Açıklama |
---|---|---|
ECMAScript 1st Edition (ECMA-262) | Standard | İlk tanım. |
ECMAScript 5.1 (ECMA-262) | Standard | Tarifnamenin birkaç bölümünde tanımlandı: Logical NOT Operator, Binary Logical Operators |
ECMAScript 2015 (6th Edition, ECMA-262) | Standard | Tarifnamenin birkaç bölümünde tanımlandı: Logical NOT Operator, Binary Logical Operators |
ECMAScript Latest Draft (ECMA-262) | Draft | Tarifnamenin birkaç bölümünde tanımlandı: Logical NOT Operator, Binary Logical Operators |
Tarayıcı Uyumluluğu
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Mantıksal VE (&& ) |
(Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Mantıksal YA DA ( |
(Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Mantıksal DEĞİL (! ) |
(Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Özellik | Android | Android üzerinde Chrome | Firefox Mobil (Gecko) | IE Mobil | Opera Mobil | Safari Mobil |
---|---|---|---|---|---|---|
Logical AND (&& ) |
(Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Logical OR (|| ) |
(Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Logical NOT (! ) |
(Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |