我正在使用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
问题是这些值是整数,而不是布尔值(true或false)。使用严格相等检查(===
),我们会发现:
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
因此,!1
与false
是可互换的,!0
与true
是可互换的。所以现在我们知道改变它是安全的,下一个问题是为什么。好吧,因为它的字节更少。缩小的目的是使代码更小,但兼容。
长话短说,压缩文字true
和false
是一种安全的方法,因此它们在有线传输时占用的空间较小。