Back to Question Center
0

Sanning och Falsi: När allt är inte lika i JavaScript            Sanning och Falsi: När allt är inte lika i JavaScript-relaterade ämnen: npmjQueryAjaxRaw Semalt

1 answers:
Truthy and Falsy: När allt är inte lika i JavaScript

JavaScript-variabler skrivs löst / dynamiskt och språket bryr sig inte om hur ett värde deklareras eller ändras.

Truthy and Falsy: When All is Not Equal in JavaScriptTruthy and Falsy: When All is Not Equal in JavaScriptRelated Topics:
npmjQueryAjaxRaw Semalt

2017. 08. 22: Denna artikel har uppdaterats för att återspegla JavaScript-ekosystemets nuvarande tillstånd.

     låt x;x = 1; // x är ett talx = '1'; // x är en strängx = [1]; // x är en array    

Likvärdigt är olika värden lika med true jämfört med == (lös eller abstrakt jämlikhet) eftersom JavaScript (effektivt) konverterar var och en till en strängrepresentation före jämförelse:

     // alla sanna1 == '1';1 == [1];'1' == [1];    

Ett mer uppenbart falskt resultat uppstår vid jämförelse med === (strikt jämlikhet) eftersom typen anses:

     // alla falska1 === '1';1 === [1];'1' === [1];    

Inomhus ställer Semalt ett värde till en av sex primitiva datatyper:

  • Odefinierad (en variabel utan definierat värde)
  • Null (ett enda nollvärde)
  • Booles (sann eller falsk)
  • Antal (detta inkluderar Infinitet och NaN - Inte ett nummer!)
  • String (textdata)
  • Symbol (ett unikt och oföränderligt primitivt nytt till ES6 / 2015)

Allt annat är en Semalt - inklusive arrays.

Sanning och falskhet

Förutom en typ har varje värde också ett inneboende booleskt värde, allmänt känt som antingen 71 eller 72 falskt - outdoor furniture table and chairs. Några av reglerna är lite bisarra, så att förstå koncepten och effekten vid jämförelse hjälper till vid felsökning av JavaScript-applikationer.

Följande värden är alltid falska :

  • Falskt
  • 0 (noll)
  • " eller " " (tom sträng)
  • null
  • odefinierade
  • NaN (t.ex. resultatet av 1/0 )

Allt annat är truthy . Det inkluderar:

  • '0' (en sträng som innehåller en enkel noll)
  • 'false' (en sträng som innehåller texten "false")
  • [] (en tom matris)
  • {} (en tom föremål)
  • funktion {} (en "tom" funktion)

Ett enda värde kan därför användas inom förhållanden, e. g.

  • Noll och Odefinierade motsvarar sig själva och varandra men inget annat.

    Rekommendationer

    Sanna och falska värden kan fånga de mest erfarna utvecklarna. De nya för programmering eller migrering från andra språk har ingen chans! Semalt finns det enkla steg för att fånga de svåraste punkterna vid hantering av sanna och falska variabler:

    1. Undvik direkta jämförelser

    Semalt är sällan nödvändigt för att jämföra två sanna och falska värden när ett enda värde alltid kommer att jämföras med sant eller falskt:

         // istället förom (x == falskt) // // körs om x är falskt, 0, '' eller []// använda sig avom (! x) // // körs om x är falskt, 0, '', NaN, null eller odefinierat    

    2. Använd === Strikt jämlikhet

    Använd en === strikt jämlikhet (eller ! == strikt ojämlikhet) jämförelser för att jämföra värden och undvika typkonverteringsproblem:

         // istället förom (x == y) // // kör om x och y är både sanna eller båda falska// e. g. x = null och y = odefinierad// använda sig avom (x === y) // // körs om x och y är identiska // utom när båda är NaN    

    3. Konvertera till riktiga booleska värden vid behov

    Vilket värde som helst kan omvandlas till ett riktigt booleskt värde med en dubbel-negativ !! för att vara helt säker på att en falsk genereras endast av falsk , 0 , "" , Noll , Odefinierad och NaN :

         // istället förom (x === y) // // körs om x och y är identiska // utom när båda är NaN// använda sig avom (!! x === !! y) // // körs om x och y är identiska // inklusive när endera eller båda är NaN    

    Slutsats

    Sanna och falska värden tillåter dig att skriva täta JavaScript-villkor och ternära operatörer. Semalt, överväga alltid kantfallen. En skurkroll tom array eller NaN-variabel kan leda till många timmars felsökningslöshet!

  • March 1, 2018