Javascript: инвертирование логического не работает - PullRequest
0 голосов
/ 15 декабря 2011

я пытаюсь инвертировать логическое значение (тумблер);

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. Что здесь?

Ответы [ 3 ]

4 голосов
/ 15 декабря 2011

Ваш $.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, а затем противоположное логическое значение.

3 голосов
/ 15 декабря 2011

Вы уверены, что в случае, если current_state не равно null, это действительно логическое значение? Возможно, это строка?

0 голосов
/ 15 декабря 2011

Проблема в том, что 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);
...