我试图反转一个布尔值(切换);
var current_state=$.cookie('state');
if(current_state==null) {
current_state=false;
}
console.log(current_state);
current_state=(!current_state);
console.log(current_state);
$.cookie('state', current_state, { expires: 7, path: '/' });
在我看来,第二个console.log
应显示与第一个false
相反的内容,但两个调用都会报告{{1}}。什么东西在这里?
答案 0 :(得分:4)
您的$.cookie('state')
似乎是一个字符串(“false
”)。
作为证据,请参阅以下代码(也在this jsfiddle中):
var current_state='false';
if(current_state==null) {
current_state=false;
}
console.log(current_state);
var current_state=(!current_state);
console.log(current_state);
它输出false
两次。
为什么呢?因为您检查它是否为空并且不支持其他情况。
您可以这样做:
var current_state='false';
if(current_state==null ||
current_state==false ||
current_state=='false') {
current_state = false;
}else{
current_state = true;
}
console.log(current_state);
current_state=(!current_state);
console.log(current_state);
并且您的代码将首先输出布尔true
或false
,然后输出相反的布尔值。
答案 1 :(得分:3)
如果current_state
不是null
它确实是一个布尔值,你确定吗?也许这是一个字符串?
答案 2 :(得分:0)
问题是current_state不是布尔值而是字符串
var current_state=$.cookie('state');
if(current_state==null) {
current_state=false;
}
console.log(current_state);
var current_state= current_state == 'false' ? "true" : "false"; // (!current_state);
console.log(current_state);
$.cookie('state', current_state);