7

我注意到 Closure Compiler 将 true 和 false(或 1 和 0)编译为 !0 和 !1。这对我来说没有意义,因为它的字符数是 1 和 0 的两倍。这是有原因的吗?有什么好处吗?

谢谢。

4

1 回答 1

10

1 !== true0 !== 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;一个条件,则为假,第二行为真。使用var a = !0;脚本仍然可以正常工作。

于 2013-03-16T07:31:59.070 回答