2013-03-16 25 views
7

Ich bemerkte, dass Closure Compiler wahr und falsch (oder 1 und 0) als! 0 und! 1 kompiliert. Für mich ergibt das keinen Sinn, da es doppelt so viele Zeichen wie 1 und 0 gibt. Gibt es einen Grund dafür? Gibt es einen Vorteil?Ist! 0 und! 1 besser als 1 und 0?

Danke.

Antwort

10

1 !== true und 0 !== false, aber !0 === true und !1 === false. Der Compiler stellt lediglich sicher, dass der Typ boolesch bleibt.

Betrachten Sie dieses Beispiel:

var a = true; 

if(a === true) { 
    console.log('True!'); 
} 

if(a === 1) { 
    console.log('You should never see this.'); 
} 

Wenn Sie die erste Zeile var a = 1; die erste bedingte und das zweite wahr wäre falsch ändern. Unter Verwendung von var a = !0; würde das Skript immer noch korrekt funktionieren.

+0

'! 0' hat den zusätzlichen Vorteil, 2 Zeichen zu speichern und'! 1' hat den zusätzlichen Vorteil, 3 zu speichern, während der Verkleinerung. Überoptimiert, aber wenn eine Maschine die Optimierung durchführt, wen interessiert das schon. – Norguard

+0

Interessant, danke! – Suffick