Heim >Web-Frontend >js-Tutorial >Die Rolle von zwei Ausrufezeichen in JavaScript
var a;
var b=!!a;
a ist standardmäßig undefiniert. !a ist wahr, !!a ist falsch, daher ist der Wert von b falsch, nicht undefiniert oder andere Werte, hauptsächlich um spätere Urteile zu erleichtern.
!! Wird im Allgemeinen verwendet, um den folgenden Ausdruck in Daten vom Typ Boolean (Boolean) zu zwingen, d. h. er kann nur wahr oder falsch sein, da JavaScript eine schwach typisierte Sprache ist ( Variablen haben kein fester Datentyp), daher müssen sie manchmal in den entsprechenden Typ umgewandelt werden, ähnlich wie:
a=parseInt(“1234″)
a="1234″-0 // Konvertieren in Zahl
b=1234+““ //In String konvertieren
c=someObject.toString() //Objekt in String konvertieren
wobei Typ 1 und 4 sind explizite Konvertierungen, 2 und 3 sind implizite Konvertierungen
Boolesche Konvertierung, die JavaScript-Konventionsregeln sind
falsch, undefiniert, null, 0, "" sind falsch
wahr, 1, „somestring“, [Object] ist wahr
Für andere implizit konvertierte Werte wie null und undefiniert erzeugt der !-Operator ein wahres Ergebnis. Der Zweck der Verwendung von zwei Ausrufezeichen besteht also in der Konvertierung diese Werte in „äquivalente“ boolesche Werte; ===================================== =========== =========================
Lassen Sie uns ein einfaches Beispiel zur Veranschaulichung verwenden:
var o={flag:true };var test=!!o.flag;//Entspricht var test=o.flag||false;
alert(test);Da die Verwendung des !-Operators auf null und undefiniert führt Um ein echtes Ergebnis zu erzielen, besteht der Zweck der Verwendung von zwei Ausrufezeichen darin, dass test natürlich denselben Wert wie o.flag annimmt, wenn der Wert des Flags in o explizit festgelegt ist (nicht null/undefiniert/0""/usw.). ; wenn nicht festgelegt, wird der Test standardmäßig auf „false“ und nicht auf „null“ oder „undefiniert“ gesetzt.
Das klassische Beispiel in jQuery lautet wie folgt: (jQuery 1.7.0.js: Zeile 748)
grep: function( elems, callback, inv ) {
var ret = [], retVal;
inv = !!inv;
// Durchsuchen Sie das Array und speichern Sie nur die Elemente
//, die die Validatorfunktion bestehen
for ( var i = 0, length = elems.length; i < length; i++ ) {
if ( inv !== retVal ) {
ret.push( elems[ i ] );
}
}
return ret;
}
Bei Verwendung der grep-Funktion, wenn der dritte Parameter angegeben ist und nicht der Wert null/undefiniert/0"/usw. ist , dann ist inv wahr, andernfalls ist es falsch. Damit soll sichergestellt werden, dass die Werte von inv und retVal nur aus wahr/falsch und nicht aus anderen Werten übernommen werden können, um spätere Beurteilungen zu erleichtern.