我注意到Closure Compiler将true和false(或1和0)编译为!0和!1。这对我来说没有意义,因为它的字符数是1和0的两倍。这是有原因的吗?有什么好处吗?
感谢。
答案 0 :(得分:10)
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;
脚本仍然可以正常工作。