为什么需要if(0)和if(1)

时间:2012-07-06 02:12:37

标签: javascript arcgis

在ArcGIS 3.0 for javascript中查看此代码以获取代码。 https://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0

里面有“if(0)”和“if(1)”,为什么需要这个?是不是(0)总是假,如果(1)总是如此?

3 个答案:

答案 0 :(得分:3)

Dojo构建工具就是这样做的(在给定的构建选项下),但不是用于混淆。如果查看非构建的dojo.js和相应的构建的dojo.js.uncompressed.js文件,您可以看到构建工具正在用硬连线的true / false测试替换has(“somefeature”)调用。注意,这可以而且确实创建了无法访问的代码。为什么这样?因为智能优化编译器(例如Google Closure)可以删除所有死代码,导致文件更小(有时候更小......这就是重点)。

从概念上讲,它是这样的:

  1. 非构建代码具有“厨房接收器”,具有动态评估的has()调用。
  2. 您可以使用选项配置构建配置文件,以指示您在自定义构建中执行/不需要的内容。
  3. 构建过程用硬连线的真/假测试替换动态has()调用[用于相应的构建选项](或者更好的方式来查看它是进/出测试)。
  4. Closure编译器在缩小时删除“out”代码。
  5. 查看当前的“Dojo Build System”文档和http://jamesthom.as/blog/2012/08/03/finding-nano/以获取更多信息。此外,here's a good low/code-level description此过程。

    P.S。 “if(0)/ if(1)”并不是真正的混淆......有点相反。如果有人想要混淆,他们更有可能“如果(a)......如果(b)......如果(c)......”,远远地,远远的。然而,minifiers产生的代码比它们自己的代码更加模糊。在关闭之前和之后检查dojo.js源代码;最终产品与原始产品几乎没有相似之处。

答案 1 :(得分:2)

是的,0始终为false,1始终为真。

然而,正如您在代码中所看到的,该公司认为这是他们的商业秘密:

COPYRIGHT 2009 ESRI

 TRADE SECRETS: ESRI PROPRIETARY AND CONFIDENTIAL
 Unpublished material - all rights reserved under the
 Copyright Laws of the United States and applicable international
 laws, treaties, and conventions.

通常会混淆这样的代码(即使其难以阅读)。其中一种方法是插入无用的语句,例如您见过的if(1)if(0)

您可以阅读有关混淆here的更多信息。

另一种可能的解释是,这些if语句用于代替尚未实现的真实逻辑,如@mvbl fst所述。

答案 2 :(得分:1)

这可以用来代替尚未实现实际逻辑的真实if()语句。正如@houbysoft所提到的,它们被解释为布尔值false和true。因此,对于平均时间,他们使用false或true来确保内部语句始终执行(或不执行),并打算稍后添加实际检查。