Javascript缩小为什么是false替换为!1并且使用!0

Are*_*k S 20 javascript minify uglifyjs

我正在使用Enyo2编写一个应用程序,它带有一个基于UglifyJS的缩小工具.我注意到了:

var t = false
Run Code Online (Sandbox Code Playgroud)

被替换为

var t=!1
Run Code Online (Sandbox Code Playgroud)

同样的方式将被替换为!0.我确信有一个很好的解释,我找不到它.任何的想法?

Pie*_*rre 28

显然有一个.如果使用1或0来翻译true或false,它会更短但看作整数.如果你加!在前面和后面,它们将合并为布尔并且仍然很短.


Jas*_*son 17

它是表达价值的最小的非模糊方式.

true在线上使用4个字符并false使用5个字符. !1!0使用2个字符.

  • 因为1和0也可以是数值.这就是我添加非歧义的原因 (10认同)

Jam*_*lly 7

在JavaScript中,0是一个.这意味着0等于false表示为布尔类型时.另一方面是1; 或者任何其他正数,不是假值,而是等同于true.

在这里我们可以设置:

t = 0; // false
t = 1; // true
Run Code Online (Sandbox Code Playgroud)

这个问题是这些值是整数(数字)而不是布尔值().使用严格的相等检查(===)我们会发现:

t = 0;
t == false; // true
t === false; // false
Run Code Online (Sandbox Code Playgroud)

!运营商执行的价值逻辑非操作,并且可以作为一种快速的任何值转换为布尔值:

t = !1;
t == false; // true
t === false; // true
Run Code Online (Sandbox Code Playgroud)

性能方面,和之间并没有太大区别,但是在缩小术语中,这会将我们的JavaScript减少7个字节,从而可以更快地下载它.if (!t)if (t == true)