我在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为我转换值有关吗?
答案 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.