2012-05-05 25 views
15

Olası Çoğalt:
What does the || operator do?Nesne değerindeki iki dikey çizgi, javascript'te ne anlama gelir?

Belki biri daha iyi bir kod parçacığını sağlayabilir, ancak || bir or mi şu ?:

var time = $(el).data('start') || new Date(); 

ne anlama gelmektedir Operatör ve eğer öyleyse, bir değişkenin iki farklı değere sahip olması nasıl mantıklıdır?

+0

olarak @Esailija hi sayesinde yeniden yazılabilir. –

+0

Yapacağınızı umduğum eylem bu soruyu silmekti, çünkü zaten sorulan ve cevaplanandan farklı değil. – Esailija

+1

Bahsettiğiniz bağlantıya benzer bir şey bulmaya çalıştım ama "iki, çift dikey çizgi javascript" gibi anahtar kelimeler kullanarak hiçbir şey bulamadım. Düz ingilizcede fazla bir şey olmadığı için, soruyu sormaya karar verdim. –

cevap

33

Bu, OR numaralı kullanicidir. Ne anlamamız gerekir ise:

  • Olmayan boole değerleri bir mantıksal değere dönüştürülür bir mantık operatörü kullanıldığında. false'a dönüştürülen değerler "falsy" olarak adlandırılır ve true'a dönüştürülen değerler "doğruluk" olarak adlandırılır. Falsy değerleri, 0, undefined, null gibi şeyleri içerir. Daha fazla görmek için Truthy and Falsy: When All is Not Equal in JavaScript.

  • OR operatör kısa devre: O durur, sonra true olduğunu ve üzerinde bulduğu kadar ifadeleri değerlendirerek devam ediyor.

Yani, var time = $(el).data('start') || new Date(); "o falsy eğer şimdiki zamanı kullanın, el elemanın start verilerine time set VEYA" anlamına gelir.

+0

hi @apsillers, "falsy" ve "truthy" nin açıklaması için teşekkürler. Onları daha önce duydum ama ne demek istediklerini anlamadım. –

+0

Basit ve dosdoğru - büyük cevap. – Yatrix

5

'veya' anlamına gelir. Bu örnekte, değerini time değişkenine atar veya bu yoksa veya false döndürürse, yerine new Date() döndürülen değeri atar. daha net yorumlarda, Malovolio tarafından belirtildiği gibi Veya: $(el).data('start') (yani, null, boş bir dize 0, yanlış tanımsız veya NaN) "falsy" ise

... sonra new Date() olduğunu değerlendirildi ve time'a atandı.

mantıksal operatörün önemli bir yönü:

Mantıksal operatörler, tipik olarak (mantıksal) değerleri Boole kullanılır; olduklarında bir Boole değeri döndürürler. Ancak, & & ve || işleçler aslında belirtilen işlenenlerden birinin değerini döndürür, bu nedenle bu işleçler Boolean olmayan değerlerle kullanılıyorsa, Boolean olmayan bir değer döndürebilirler.

Referanslar:

+0

teşekkürler @David, çok yararlı. Şimdi anladım. –

+1

Daha doğrusu, eğer $ (el) .data ('start') '," falsy "ise (yani, undefined, null, 0, false, boş bir string veya" NaN "), sonra' new Date() 'zamana göre değerlendirilir ve atanır. Garip, boş listeler ve boş nesneler falsi olarak kabul edilmez. – Malvolio

-1

logical sum anlamına gelir. var time = $(el).data('start') || new Date();, $(el).data('start') ise undefined veya false değerini veya time değerini new Date işlevinden alabilir.

+0

teşekkürler @Denis. "mantıksal toplam", "veya" den nasıl farklıdır? –

+1

Downvoters için neyin yanlış yazdığı? –

+0

Bu cevap neden reddedildi? –

1

Operatörün yolu || değerlendirildiğinde, eğer ilk kısım doğruysa, geri döndü. İlk kısım false-ish ise, ikincisini döndürür. Yukarıdaki ifadeler nedenle eşdeğerdir:

if ($(el).data('start')) { 
    time = $(el).data('start'); 
} else { 
    time = new Date(); 
} 
5
exp1 || exp2 

exp1 değerlendirir. Eğer exp1 doğruysa, exp2 değerlendirilmez (kısa devre değerlendirmesi olarak bilinir). Eğer exp1 false değerini döndürürse, exp 2 değerlendirilir. Eğer exp1 VEYA exp2 doğruysa o zaman (exp1 || exp2) true olarak değerlendirilir.

Ancak Javascript'te değerleri kullanarak operatörü ayarlayabilirsiniz.

a = something 

if (prop) 

a = prop 

Bu başvuru için

a = prop || something 
İlgili konular