在ArcGIS 3.0 for javascript中查看此代码以获取代码。 https://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0
里面有“if(0)”和“if(1)”,为什么需要这个?是不是(0)总是假,如果(1)总是如此?
答案 0 :(得分:3)
Dojo构建工具就是这样做的(在给定的构建选项下),但不是用于混淆。如果查看非构建的dojo.js和相应的构建的dojo.js.uncompressed.js文件,您可以看到构建工具正在用硬连线的true / false测试替换has(“somefeature”)调用。注意,这可以而且确实创建了无法访问的代码。为什么这样?因为智能优化编译器(例如Google Closure)可以删除所有死代码,导致文件更小(有时候更小......这就是重点)。
从概念上讲,它是这样的:
查看当前的“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来确保内部语句始终执行(或不执行),并打算稍后添加实际检查。