比较这些字符串:
{}[0]
[][0]
void 0
为什么Closure Compiler生成
void 0
什么时候可以生成
[][0]
或
{}[0]
甚至
[].a
如同torazaburo提到的那样
哪个短1个字符?
答案 0 :(得分:4)
最小代码大小不是Closure编译器的唯一目标。另一个目标(我假设)是生成与原始代码一样快的代码。
在各种JavaScript运行时中, void 0
可能会更快。它不必构造对象或数组并取消引用不存在的属性。
JavaScript运行时引擎可能会优化{}[0]
或[][0]
,但为什么Closure编译器要依赖它?如果那些没有得到优化,那么它们会明显慢于void 0
。
请注意,JavaScript代码通常以压缩形式下载,如果void 0
出现在多个位置,则可能会压缩它们。
另请参阅Blaise的回答,了解另一个不使用{}[0]
或[][0]
的理由。
答案 1 :(得分:3)
{}[0]
没有(总是?看到注释)返回undefined,并且[][0]
理论上可以返回除undefined之外的其他内容,因为您可以覆盖数组构造函数/ getter。