我正在使用Enyo2编写一个应用程序,它带有一个基于UglifyJS的缩小工具。 我注意到了:
var t = false
替换为
var t=!1
同样的方式将被替换为!0。我确信有一个很好的解释,我找不到它。有什么想法吗?
答案 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
互换。所以现在我们知道改变它是安全的,接下来的问题是为什么。好吧,因为它的字节数更少。缩小的目的是使代码更小,但兼容。
长话短说,这是压缩文字true
和false
的一种安全方式,因此当通过网络传输时,它们占用的空间更少。