gpt4 book ai didi

javascript - Eclipse 格式化破坏了 JavaScript 脚本中的 EL 表达式

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:35:18 27 4
gpt4 key购买 nike

哇,这个标题满满的。让我解释。我有一个 .jsp页面,在这个页面上是一个 JavaScript <script ..>元素和 JavaScript 内部有一个 EL 表达式 ( ${..} )。代码如下所示:

<script type="text/javascript">
jQuery(document).ready(function() {
var HOST_ID = ${host.id};
...
});
</script>

问题:
Eclipse JavaScript 格式化程序默认展开 ${host.id}在多行。我猜测 EL 表达式以某种方式被解释为 JavaScript 对象。不管怎样,标签最终会变成这样:

var HOST_ID = $
{
host.id
}
;

=> 这实际上破坏了代码!

如果分成多行,标签将不再被识别为有效的 EL 表达式,JavaScript 代码的执行将停止抛出异常。

我知道有一种方法可以使用标记(// @formatter:offon)在 Java 格式化程序中关闭临时格式化,但 Eclipse 中的 JavaScript 格式化程序没有这样的选项。


修复(阅读解决方法)此问题的唯一方法是强制 JavaScript 格式化程序从不扩展对象。但这在两个方面存在问题:

  • 不扩展对象可能会非常困惑并导致代码极其不可读。
  • 在多行中扩展对象是 Eclipse JavaScript 格式化程序中的默认

这意味着如果我的团队中的任何成员不小心自动格式化了 .jsp包含所描述构造的文件,代码将无声地中断。它看起来仍然像有效的 JS,并通过了构建等,但在执行时它不起作用。


有人对此有任何解决方案吗?最好的解决方案是以某种方式禁用带有标记的格式化,例如 Java 格式化程序中使用的标记(此解决方案无需强制执行公司/团队范围的格式化程序标准或希望没有人会意外按下 Shift+Ctrl+F)。

最佳答案

在我撰写本文时,公认的解决方案建议将 EL 表达式用单引号括起来作为问题的解决方案。如果您决定这样做并且 EL 表达式中的值是 bool 值,请务必小心,因为该值现在是 Javascript 中的字符串并且条件比较可能无法按预期工作...

假设您有一个 bool 变量 host.isActive 并且值为 true。

var HOST_IS_ACTIVE1 = ${host.isActive}; // var type is boolean in Javascript

if (HOST_IS_ACTIVE1 == true) {
// this code will be executed
}

if (HOST_IS_ACTIVE1 == 'true') {
// this code will not be executed
}

var HOST_IS_ACTIVE2 = '${host.isActive}'; // var type is string in Javascript

if (HOST_IS_ACTIVE2 == true) {
// this code will NOT be executed
}

if (HOST_IS_ACTIVE2 == 'true') {
// this code will be executed
}

关于javascript - Eclipse 格式化破坏了 JavaScript 脚本中的 EL 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13606835/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com