在隐藏字段中存储布尔值以进行表单处理

时间:2016-04-27 15:39:14

标签: javascript jquery jsp

我在truthy和falsy(http://adripofjavascript.com/blog/drips/truthy-and-falsy-values-in-javascript.html)上阅读了很多好东西,特别是' =='之间的区别。和' ==='在JavaScript中。最好的解释和资源主要来自这个Stack Overflow问题:

Which equals operator (== vs ===) should be used in JavaScript comparisons?

我正在处理表单,需要使用以下jQuery语法将布尔值存储到隐藏字段中:

$('[name="fieldName"]').val(true);

所以我在隐藏字段中插入一个布尔值true或false。在屏幕处理期间,我使用以下代码在许多if语句中获取此字段值,并按如下方式进行比较:

$('[name="fieldName"]').val() === "true"

注意我是如何使用===运算符来比较字符串值" true"。

我的问题;如果JavaScript中的Object只是类型引用,那么boolean必须是值类型。因此,我假设,与===运算符的值比较不仅比较内容而且比较类型,上面的表达式应该返回false?但是在我的代码中它返回true - 有人可以解释为什么会这样吗?

此代码以前使用==进行比较,但为了避免我正在实施的假冒风险===尽可能。这可能与jQuery为我转换值有关吗?

2 个答案:

答案 0 :(得分:3)

  

这可能与jQuery为我转换值有关吗?

HTML表单元素始终将值存储为字符串,而不管实际内容是什么。在您的情况下,它是boolean,但即使它是number类型,您会看到的是" 10.5"不是10.5。

如果您真的想将布尔值与布尔值进行比较,我建议的是:

Boolean($j('[name="fieldName"]').val()) === true

答案 1 :(得分:0)

Boolean()方法将不起作用,因为:

Boolean("true") === true;
Boolean("false") === true;

似乎只有这样:

$j('[name="fieldName"]').val(true)
$j('[name="fieldName"]').val() === "true"
or
$j('[name="fieldName"]').val(1)
$j('[name="fieldName"]').val() === "1"
etc.