2013-03-16 124 views
7

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

谢谢。

回答

10

1 !== true0 !== false,但!0 === true!1 === false。编译器只是确保类型保持布尔型。如果更改第一行var a = 1;第一条件将被虚假和第二真实

var a = true; 

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

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

考虑这个例子。使用var a = !0;脚本仍然可以正常工作。

+0

'!0'具有节省2个字符的额外好处,在缩小过程中'!1'具有节省3的额外好处。方式过度优化,但如果一台机器正在进行优化,谁在乎。 – Norguard 2013-03-16 07:37:05

+0

有趣,谢谢! – Suffick 2013-03-16 07:41:05