Javascript缩小为什么是false替换为!1和真与!0

Javascript minification why is false replaced with !1 and true with !0

本文关键字:为什么 缩小 false 替换 Javascript      更新时间:2023-09-26

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

var t = false

被取代

var t=!1

同样的道理被替换为!0。我相信有一个很好的解释,我就是找不到。知道吗?

显然有一个。如果使用1或0来转换true或false,它会更短,但被视为整数。如果您添加!在它们的前面和后面,它将合并为布尔值,并且仍然是短的。

这是表示值的最小的非模糊方式。

true在导线上使用4个字符,false使用5个字符。!1&!0使用2个字符。

在JavaScript中,0是一个falsy值。这意味着当表示为布尔类型时,0等于false。1;或者任何其它的正数不是伪值并且将等同于true

在这里我们可以设置:

t = 0; // false
t = 1; // true

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

t = 0;
t == false; // true
t === false; // false

!运算符对值执行逻辑NOT运算,并且可以用作将任何值转换为布尔值的快速方法:

t = !1;
t == false; // true
t === false; // true

就性能而言,if (!t)if (t == true)之间并没有太大区别,但从缩小的角度来看,这将使我们的JavaScript减少了7个字节,下载速度更快。

Negation将非布尔值转换为纯布尔值。

我在Chrome开发工具中运行了这个:

> !1
false
> !0
true

因此,!1false是可互换的,!0true是可互换的。所以现在我们知道改变它是安全的,下一个问题是为什么。好吧,因为它的字节更少。缩小的目的是使代码更小,但兼容。

长话短说,压缩文字truefalse是一种安全的方法,因此它们在有线传输时占用的空间较小。