Ik begrijp niet hoe ik een IF/THEN-instructie in JavaScript moet schrijven?

Hoe kan dit EVENTUEEL gebeuren?

var X = db.getItem('ShowDeleted');
console.log(X);
if (X) {
    console.log(1);
} else {
    console.log(2);
}

In Firebug krijg ik:

true
1
false
1

Terwijl ik het betreffende fragment ontgrendel.

Bewerken: mijn excuses voor het gebruik van db. in mijn voorbeeld. db = localStorage.

0
Laat ons wat meer code zien. Niet zeker of het twee keer wordt uitgevoerd. Moeilijk te zeggen, omdat we slechts een klein codefragment hebben. Als het twee keer zou lopen, zou ik verwachten ... waar, 1, onwaar, 2 of waar, 1, waar, 1. Tenzij natuurlijk, zoals ghik heeft vermeld, is het een tekenreeks.
toegevoegd de auteur Dale, de bron
Op basis van de code die je hebt weergegeven, kan dit niet gebeuren. Er zijn niet eens 4 console.log -gesprekken in wat u hebt opgegeven.
toegevoegd de auteur Matt Ball, de bron
Het lijkt erop dat dit twee keer wordt uitgevoerd. Uw syntaxis is correct.
toegevoegd de auteur Diodeus - James MacFarlane, de bron
wat is het type van je variabele x ?
toegevoegd de auteur MilkyWayJoe, de bron
Uw X is waarschijnlijk een tekenreeks. Elke niet-nullengtetekenreeks wordt impliciet geconverteerd naar true wanneer deze ergens wordt gebruikt waar de booleaanse waarde wordt verwacht (zoals in de instructie if ).
toegevoegd de auteur ghik, de bron

2 antwoord

What I imagine is happening (although it's really impossible to tell without knowing what type db.getItem returns) is that X ends up being some nonboolean value. Then the if statement is always evaluates to true because the variable is some value other than 0. That is, if it returns a string "false" (or really any object for that matter) the following always follows the if branch, not the else

if("false"){
  //do something
} else {
  //do something else
}

U moet ervoor zorgen dat u een booleaanse waarde evalueert, niet een andere waarde.

2
toegevoegd

Zoals ghik opmerkte, wordt uw X waarde waarschijnlijk geretourneerd als een tekenreeks. Here is een jsfiddle-script dat goed werkt als het is ingesteld als een booleaanse waarde en geeft je bizarre gedrag weer wanneer het is ingesteld als een tekenreeks

//boolean version
var X =true;
console.log(X);
if (X) {
    console.log(1);
} else {
    console.log(2);
}
var X =false;
console.log(X);
if (X) {
    console.log(1);
} else {
    console.log(2);
}
//outputs
true
1
false 
2


//String version
var X ='true';
console.log(X);
if (X) {
    console.log(1);
} else {
    console.log(2);
}
var X ='false';
console.log(X);
if (X) {
    console.log(1);
} else {
    console.log(2);
}
//outputs
true
1
false 
1
1
toegevoegd
db = localStorage. Bedankt dat je me dit hebt laten zien!
toegevoegd de auteur Phillip Senn, de bron