Javascript数组:为什么这不起作用?

Mat*_*oli 32 javascript arrays

我有以下工作代码:

var routes = [];
Run Code Online (Sandbox Code Playgroud)

用于javascript的Eclipse验证器打印以下警告:

Type mismatch: cannot convert from any[] to any
Run Code Online (Sandbox Code Playgroud)

我的空阵列出了什么问题?

编辑:警告后来消失了.显然Eclipse错了,问题需要关闭.对于那个很抱歉.

小智 39

您的JavaScript是有效的,问题在于Eclipse的JSDT插件.在最新版本中,他们引入了类型验证,这在许多情况下都存在问题 - 不仅适用于空数组(如您的情况).另一个典型案例可能如下所示:a = b || c; 当b和c属于不同类型时,插件会抱怨(这是JavaScript的绝对有效代码).已经向JSDT开发人员报告了有关此问题的几个错误,但问题尚未解决.

不幸的是,目前无法使用Eclipse中的JSDT配置屏幕关闭类型验证.我直接从JSDT源代码中关闭它.为此,请按以下步骤操作:

  1. Eclipse WebTools Project下载JSDT源代码
  2. org.eclipse.wst.jsdt.debug.core使用Eclipse 打开项目.确保安装了Eclipse SDK.可能还需要调整plugin.xml文件中的某些依赖项.
  3. 类型验证位于类的computeSeverity方法中ProblemReporter.
  4. 要关闭类型验证,请替换以下行:case IProblem.TypeMismatch: return ProblemSeverities.Warning;withcase IProblem.TypeMismatch: return ProblemSeverities.Ignore;
  5. 构建项目并关闭Eclipse.
  6. 在Eclipse文件夹中找到名为的文件org.eclipse.wst.jsdt.core<version>.jar- 制作它的安全副本,然后打开jar文件并将文件替换为ProblemReporter.class您在步骤5中编译的文件(该文件位于bin项目的文件夹中).
  7. 启动Eclipse并清理JavaScript项目.JSDT将忽略所有类型检查.

重要!确保您已下载了在Eclipse中使用的相同版本的JSDT.最终,您可以替换整个插件,而不是替换单个文件.

如果您不想自己下载和编译插件,可以尝试使用我的固定版本.我把它放在我的FunctionSack网页上.我正在使用Eclipse 3.7(Indigo)和JSDT 1.3.0,所以如果你想使用我的文件,请确保你有类似的配置.


Ily*_*mov 11

eclipse的web工具平台插件(wtp)包含一个JavaScript验证器,它对对象文字"{}"和数组文字"[]"符号有些过敏,它还会显示一些其他恼人的"问题",例如"缺少分号"等等

我找到了最适合我的解决方案,我的神经是完全禁用wtp嵌入式JavaScript验证并使用第三方插件.令人惊讶的是,禁用JavaScript验证器并不容易.每个eclipse版本都需要不同的方法,因此请尝试以下指南:

  • 在版本3.6之前的Eclipse中,可以通过'Window-> Preferences-> JavaScript-> Validator-> Errors/Warnings - > []启用JavaScript语义验证来禁用javascript验证" - 但这似乎不适用于3.7靛蓝看到了日食虫
  • 在3.7 Indigo中尝试Project - > Properties - > Builders - > [] JavaScript Validator
  • 如果没有帮助,请尝试Project - > Properties - > JavaScript - > Include Path - > Source - > Excluded - > Edit - > Exclusion Patterns - > Edit - >*/
  • 如果上面没有任何帮助,请打开.project文件并删除/注释掉"<nature> org.eclipse.wst.jsdt.core.jsNature </ nature>"行

禁用wtp验证程序后,您可以尝试使用第三方工具,如jsLint/jsHint