Stavo rivedendo il codice per una fabbrica angularjs per capire meglio come funziona. Il codice contiene una dichiarazione if
che non comprendo completamente.+ !! operatore in una dichiarazione if
In un plnkr demo l'autore ha scritto questo:
if ((+!!config.template) + (+!!config.templateUrl) !== 1) {
throw new Error('Expected modal to have exactly one of either `template` or `templateUrl`');
}
It is slightly different in the github repo:
if (!(!config.template^!config.templateUrl)) {
throw new Error('Expected modal to have exactly one of either `template` or `templateUrl`');
}
Ovviamente dal messaggio di errore si sta controllando per vedere se uno dei due esiste. Non sono sicuro di come giunga alla conclusione. Non sono stato in grado di trovare alcuna informazione su ^
o +!
La mia domanda è: come funziona questa istruzione if? (^
o +!
o +!!
specificamente)
^è il bit a bit javascript Operatore XOR. – Jacques
'Non sono stato in grado di trovare alcuna informazione su^o +!' Non hai usato la parola chiave giusta. cercare 'javascript operator' –
Primo! prende il valore - come config.template (che è probabilmente un numero a causa del + !!), lo converte in vero o falso in base al fatto che sia zero (falso) o non zero (vero) - che inverte il senso logico - poi il secondo! lo inverte di nuovo allo stesso senso logico invece di essere invertito, quindi il + considera vero/falso come il numero 1 o 0. Quindi, se non è impostato, + !! risulterà nel * numero * 0, altrimenti sarà il * numero * 1 * indipendentemente da quale sia il valore numerico effettivo di .template *. Quindi possono fare il + tra le due espressioni. – simpleuser