2012-05-06 7 views
71

Olası Çoğalt:
What is the !! (not not) operator in JavaScript?Javascript'te çift olumsuzlama (!!) - amaca yönelik nedir?

Ben

function printStackTrace(options) { 
    options = options || {guess: true}; 
    var ex = options.e || null, guess = !!options.guess; 
    var p = new printStackTrace.implementation(), result = p.run(ex); 
    return (guess) ? p.guessAnonymousFunctions(result) : result; 
} 

kod

bu parça karşılaştım Ve neden çifte yadsımasını merak etmeye yardım edemedim? Aynı etkiye ulaşmak için alternatif bir yol var mı?

+0

Biraz düşünmek, öyle görünebilir. Bazı zorlu döküm, ama bunu başarmanın en iyi yolu bu mu? (Ruby'den alınmış olduğunu mu sanıyorum?) –

+0

Ayrıca, bu, diğer birçok dilde temelde aynı nedenden ötürü kullanılır (örneğin C, C++, Ruby, Java,…). –

+2

Cevaplar olduğunda bir kez silemezsiniz, bu yüzden sadece ':') olarak kapatmak için oy verin. –

cevap

108

Boolean'a dönüşür.

  • undefinedtrue
  • null için true
  • +0 için true
  • -0 için true
  • '' için true
  • 0: ilk ! şöyle değerleri dönüştürerek, bir kez ortadan

false için true

  • Diğer tüm ifadeler için true
  • false için Sonra diğer ! tekrar ortadan kaldırır. ToBoolean tam olarak !defined as its negation olduğu için boole için kısa bir döküm.Yine de burada gereksizdir, çünkü sadece koşullu operatörün koşulu olarak kullanılır, bu da aynı şekilde gerçekliği belirleyecektir.

  • +1

    "Hemen hemen eşdeğer" derken, aslında herhangi bir farklılık olup olmadığını biliyor musunuz? İşlevden daha hızlı Boolean(), belki de? – mwcz

    +0

    @mwcz. Düşünme ... yararları nelerdir? – gdoron

    +0

    @mwcz: İlk ve tek fark (en azından, bulabildiğim), Boolean'ın herhangi bir işleve ayarlanabilmesidir. – Ryan

    28
    var x = "somevalue" 
    var isNotEmpty = !!x.length; 
    

    taşlarını kırmak edelim (kod https://github.com/eriwen/javascript-stacktrace/blob/master/stacktrace.js dan): Yani kullanılan

    x.length // 9 
    !x.length // false 
    !!x.length // true 
    

    bir "truethy" dönüştürmek bir mantıksal değere \ "falsy" değer.

    • yanlış
    • boş
    • tanımlanmamış
    • boş dize "" (\ '')
    • :


      Aşağıdaki değerler koşullu tablolarda yanlış denktir 0 numaralı NaN

    Diğer tüm değerler true eşdeğerdir.

    14

    Çift negatifleştirme, "doğru" veya "yanlış" değeri bir boolean değerine dönüştürür, true veya false.

    çoğu test olarak truthiness kullanarak aşina:

    if (options.guess) { 
        // runs if options.guess is truthy, 
    } 
    

    Ama bu illa anlamına gelmez: Eğer gerçek bir boolean değerine bir "truthy" değerini zorlamak gerekiyorsa

    options.guess===true // could be, could be not 
    

    !!, bunu yapmanın kolay bir yoludur:

    !!options.guess===true // always true if options.guess is truthy 
    
    İlgili konular