【问题标题】:Comparison of JavaScript Boolean variables in IF statementsIF 语句中 JavaScript 布尔变量的比较
【发布时间】:2018-02-01 22:50:38
【问题描述】:

在我的 Spring MVC 项目中,我从 JSP 视图中的控制器获取一个布尔变量作为模型属性。基于布尔变量的值,我必须执行 Js 代码。所以我正在比较 if 语句中的值。但它没有给我正确的输出:

代码是这样的:

在 spring 控制器中,布尔变量是:

boolean isAdmin;

由 JSP 视图接收,我可以按如下方式访问它:

$(isAdmin)

在我的 JSP 视图中,我正在执行以下操作:

<script>
  alert('${isAdmin}')  // which gives the correct value .i.e : true / false

  if('${isAdmin}'){

   // some code
  }

</script>

所以在上面的 if 语句中,如果 isAdmin 的值为 false 则不应执行 if 块,但即使值为 true 也会执行。

我还比较了布尔变量的值如下:

if('${isAdmin}' == true )
if('${isAdmin}' === true) 

但是这两个也不起作用。

所以纠正我哪里做错了吗?什么是正确的比较方法?

【问题讨论】:

  • 使用'${isAdmin}' === 'true'
  • @alexmac 谢谢。你的解决方案是正确的。
  • 答案就在您的问题中。您将它用单引号括起来,这意味着它不是true,而是'true',它是文本。
  • @ChrisG 但没有用单引号括起来会导致编译时错误
  • @ChrisG 是的,单引号的原因是EL表达式应该用引号括起来。

标签: javascript java spring jsp


【解决方案1】:

为什么不直接使用不带引号的值?

if (${isAdmin}) {

【讨论】:

  • 是的,它在
  • @AkshayPethani,你能用&lt;%= ${isAdmin}) %&gt;吗?
  • @NinaScholz 我也试过这个。但它也没有奏效。
【解决方案2】:

由于结果值是一个字符串并且您期望一个布尔值,因此应该检查 '${isAdmin}' 是否与一个布尔字符串值。正如已经有人评论的那样,应该是'${isAdmin}' === 'true'

if('${isAdmin}' === 'true') {
  // TODO
}

它总是执行的原因是 Javascript 验证了 if 表达式。例如if("false") 被评估为真并执行

if("false"){
alert("What ??");
}

【讨论】:

    【解决方案3】:

    据我了解您的场景,您在服务器端 (JSP) 中有一个布尔变量 isAdmin。您想将其注入到 javascript 代码中,但它不起作用,因为您正在创建字符串文字而不是布尔文字:

    if ('true') {
      console.log('This always executes');
    }
    
    if('false') {
      console.log('This always executes, too');
    }
    

    发生这种情况是因为任何非空字符串都被 Javascript 视为“真实”值。删除引号,它将起作用。 但为了简洁起见,我会将 Javascript 代码移动到自己的文件中,并在 HTML 代码中创建一个隐藏字段来存储 isAdmin 值:

    <input id="isAdminFlag" type="hidden" value="${isAdmin}" />
    
    
    if ($('isAdminFlag').val() == 'true') { ... }
    

    【讨论】:

    • 不管怎样,最后你检查了“真”。为什么不直接这样做并有额外的输入字段?
    • 这是在 JS 代码中注入服务器端生成值的一种方式,第二种方式是使用 。它适用于 Theamleaf,我没有在 JSP 中测试过
    【解决方案4】:

    您渲染的 js 代码是错误的。渲染引擎应该将'isAdmin'的值放在js代码中,但实际上并没有这样做。 您需要像这样添加脚本

     <script>
    <![CDATA[
         var isTrueSet = ('${isAdmin}'=== 'true');
    
          if(isTrueSet ){
              // some code
      }
    ]]>
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 2020-08-20
      • 1970-01-01
      相关资源
      最近更新 更多