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

时间:2013-12-13 13:18:19

标签: javascript minify uglifyjs

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

var t = false

替换为

var t=!1

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

4 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:15)

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

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

答案 2 :(得分:7)

在JavaScript中,0是falsy value。这意味着0在表示为布尔类型时等于false。另一方面是1;或该问题的任何其他正数,不是假值,等于true

我们可以在这里设置:

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

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

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

The ! operator对值执行逻辑NOT操作,可以用作将任何值转换为布尔值的快速方法:

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

在性能方面,if (!t)if (t == true)之间有not really much difference,但在缩小术语中,这会将我们的JavaScript减少7个字节,从而可以更快地下载。< / p>

答案 3 :(得分:2)

否定将非布尔值但真值转换为纯布尔值。

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

> !1
false
> !0
true

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

长话短说,这是压缩文字truefalse的一种安全方式,因此当通过网络传输时,它们占用的空间更少。