【问题标题】:Storing boolean values in hidden fields for form processing在隐藏字段中存储布尔值以进行表单处理
【发布时间】:2020-10-15 18:16:48
【问题描述】:

我已经阅读了很多关于真假 (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);

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

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

请注意我如何使用 === 运算符与字符串值“true”进行比较。

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

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

【问题讨论】:

  • 比较代码中的$j是什么?

标签: javascript jquery jsp


【解决方案1】:

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

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

如果您真的想比较布尔值和布尔值,我的建议是:

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

【讨论】:

    【解决方案2】:

    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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多