IF语句中JavaScript布尔变量的比较

时间:2017-08-24 07:08:05

标签: javascript java spring jsp

在我的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 ,那么如果阻塞它不应该执行,但它确实执行了,即使值 true 。< / p>

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

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

但这两者都不起作用。

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

4 个答案:

答案 0 :(得分:3)

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

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

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

这是因为任何非空字符串都被视为&#34; truthy&#34;通过Javascript的值。删除引号,它将工作。 但为了清洁,我会将Javascript代码移动到自己的文件中,我将在HTML代码中创建一个隐藏字段来存储isAdmin值:

<input id="isAdminFlag" type="hidden" value="${isAdmin}" />


if ($('isAdminFlag').val() == 'true') { ... }

答案 1 :(得分:2)

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

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

它始终执行的原因是Javascript真实化if表达式。例如,if("false")是evalutes为true并执行

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

答案 2 :(得分:1)

为什么不使用没有引号的值?

if (${isAdmin}) {

答案 3 :(得分:0)

您渲染的js代码错误。渲染引擎应该把&#39; isAdmin&#39;的值。在js代码中,但实际上没有做。 你需要像这样添加你的脚本

 <script>
<![CDATA[
     var isTrueSet = ('${isAdmin}'=== 'true');

      if(isTrueSet ){
          // some code
  }
]]>
</script>