我注意到闭包编译器将true和false(或1和0)编译成!0和!1。对我来说,这似乎没有意义,因为它比1和0多了一倍的字符数。这样做有什么原因吗?有任何好处吗?
谢谢。
谢谢。
1 !== true
和 0 !== false
,但是 !0 === true
和 !1 === false
。编译器只确保类型保持为布尔类型。
考虑以下示例:
var a = true;
if( a === true ) {
console.log( 'True!' );
}
if( a === 1 ) {
console.log( 'You should never see this.' );
}
如果您将第一行更改为var a = 1;
,那么第一个条件将为false,第二个条件为true。使用var a = !0;
,脚本仍将正确工作。
!0
具有节省2个字符的额外优势,而!1
则具有节省3个字符的额外优势,这在代码压缩时非常有用。虽然有些过度优化,但如果是机器在进行优化,谁会在乎呢? - Norguard