我正在使用cookie,使用cookie的值设置其他代码变量。
我已经定义了有关cookie默认状态的数据:
const Cookie = {
config: {
name: 'Test_Cookie',
expire: 1,
value: true,
},
...
}
当符合条件时,Cookie首次设置,使用this.config.value
将Cookie的值设置为true
:
setCookie: function () {
if (!this.isCookieSet()) {
$.cookie(this.config.name, this.config.value, this.config.expire);
}
},
但是,我发现当我将代码中的cookie值返回时,我将"true"
作为字符串返回而不仅仅是true
。例如(为简单起见,上面的示例中更改了名称):
如果我尝试对Cookie的value
进行比较,并使用=== true
,我会得到错误的结果。如果我做=== "true"
那么我得到一个真实的结果:
showStuff = $.cookie('Test_Cookie') === "true"; // showStuff = true;
OR
showStuff = $.cookie('Test_Cookie') === true; // showStuff = false;
为什么设置时cookie值的变量类型会发生变化?
答案 0 :(得分:2)
Cookie是字符串。您需要将cookie值转换为您想要的类型。布尔值被保存为true或false,因为它是布尔值的字符串表示形式。
您可以使用以下内容。
var myBool = Boolean($.cookie('Test_Cookie'));
或
var myBool = ($.cookie('Test_Cookie') === "true");
修改强> 正如@ DelightedD0D的第一条评论中所建议的那样:
您也可以尝试 - $.cookie('Test_Cookie') === "true"
答案 1 :(得分:0)
供将来的读者使用:您可以对照其他答案中所述的字符串值进行检查,或将其转换为布尔值以提高灵活性。
function stringToBoolean(string) {
switch(string.toLowerCase()) {
case "false": case "no": case "0": case "": return false;
default: return true;
}
}
const isTrue = stringToBoolean("true");
const isFalse = !isTrue;