jQuery cookie将布尔值设置为字符串

时间:2016-09-06 12:51:41

标签: javascript jquery cookies

我正在使用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。例如(为简单起见,上面的示例中更改了名称):

enter image description here

如果我尝试对Cookie的value进行比较,并使用=== true,我会得到错误的结果。如果我做=== "true"那么我得到一个真实的结果:

showStuff = $.cookie('Test_Cookie') === "true"; // showStuff = true;

OR

showStuff = $.cookie('Test_Cookie') === true; // showStuff = false;

为什么设置时cookie值的变量类型会发生变化?

2 个答案:

答案 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;

参考: How can I convert a string to boolean in JavaScript?