Frage !! Ausdruck für Boolean


Ich habe John Resig gelesen Geheimnisse von JavaScript Ninja und habe diesen Code gesehen:

 function Ninja(){
   this.swung = false;

   // Should return true
   this.swingSword = function(){
     return !!this.swung;
   };
 }

Ich kenne !! wird verwendet, um einen Ausdruck in boolean zu konvertieren. Aber meine Frage ist, warum benutzt er:

return !!this.swung;

Ist das nicht überflüssig weil swung ist schon eine boolesche Variable oder fehlt mir etwas?

BTW hier ist der volle relevante Code nur für den Fall:

 function Ninja(){
   this.swung = false;

   // Should return true
   this.swingSword = function(){
     return !!this.swung;
   };
 }

 // Should return false, but will be overridden
 Ninja.prototype.swingSword = function(){
   return this.swung;
 };

 var ninja = new Ninja();
 assert( ninja.swingSword(), "Calling the instance method, not the prototype method."
)

5
2018-02-21 14:43


Ursprung


Antworten:


this.swung keine lokale Variable, sondern eine Eigenschaft von NinjaInstanzen. Daher kann die Eigenschaft durch eine externe Methode geändert werden.

Um sicherzustellen, dass swingSword gib immer einen boolean zurück, eine explizite Konvertierung mit !! ist nützlich.

Was deinen Code betrifft: Ich glaube, dass es so sein sollte !this.swung, weil !!this.swung kehrt zurück false zum this.swung = false:

this.swung = false;                                          // Defined in code
!!this.swung === !!false;                                    // See previous line
                 !!false === !true;                          // Boolean logic
                             !true === false;                // Boolean logic
                                       false === this.swung; // See first line

6
2018-02-21 14:45