JavaScript ЕСЛИ оператор логический строгий

javascript jquery html5 if-statement boolean

1605 просмотра

3 ответа

Я устанавливаю режим в скрипте, передавая "истинный" логический тип функции. В функции простой ifоператор проверяет, является ли параметр trueили false. Иногда я передаю это как строку или bool, который всегда работал, но по какой-то причине это не для этого:

setMode: function(Setting) {    
    if (Setting) {
        console.log('Enabling mode');
    } else {
        console.log('Disabling mode');
    }
}

Например, когда я передаю ей строку 'false'и записываю ее Settingв консоль, консоль говорит false, но ifоператор считает, что это правда.

Я должен добавить это в начало функции для его работы:

if (typeof Setting == 'string') {Setting = (Setting == "true"); }

Пример этого в использовании:

var inverted = $('INPUT[name="Mode"]').prop('checked');
app.setMode(inverted);

и другой:

var mode = localStorage.getItem('Mode');
this.setMode(mode);

Это так странно, так как я делал подобные вещи годами, но сейчас это только начинается. Может потому что я использую localStorageи .prop?

Автор: Jared Источник Размещён: 12.11.2019 09:07

Ответы (3)


2 плюса

Если вы попытаетесь войти в систему, 'false'очевидно, что консольные журналы false(это строка) и что оператор if видит true, потому что непустая строка является истинным логическим значением.

Если вы хотите проверить, является ли строка "true"или "false"вы должны сделать это с обычными операторами. Таким образом, вы можете добавить эту строку в начале вашей функции:

Setting = (typeof Setting === 'string') ? Setting === "true" : Setting;
Автор: Niccolò Campolungo Размещён: 26.05.2013 10:52

2 плюса

Чтобы ответить на ваш вопрос о преобразовании строки в логическое:

ECMA SPEC:

Результат [этого преобразования] равен false, если аргумент является пустой строкой (ее длина равна нулю); в противном случае результат верен.

Так что да, если вы передадите строку «false», она будет преобразована в true, что означает, что единственный вариант, который у вас есть, - это вручную проверить строки «true» или «false» и выполнить преобразование самостоятельно.

Однако .prop("checked")предполагается , что функция jQuery возвращает логическое значение (или, undefinedесли свойство не определено). Так что я бы сказал, что вы должны быть в состоянии сделать

if (elem.prop("checked"))

как здесь .

Автор: basilikum Размещён: 26.05.2013 11:21

1 плюс

Например, когда я передаю ей строку 'false'и записываю ее в консоль, консоль говорит false, но оператор if считает, что это правда.

Вывод на консоль сбивает с толку, он скрывает кавычки и логирование falseкак для строки, так "false"и для логического значения false. Тем не менее, эти два не эквивалентны, строка не пуста и действительно правдива.

Может потому что я использую localStorage и .prop?

Да. .checkedСвойство возвращает логическое значение и все работает хорошо. Напротив, локальное хранилище хранит только строки , и когда вы передаете логическое значение, вы возвращаете его строковое выражение. Вы можете отменить это с помощью

var modeStr = localStorage.getItem('Mode');
var mode = JSON.parse(modeStr);
this.setMode(mode);
Автор: Bergi Размещён: 26.05.2013 11:20
Вопросы из категории :
32x32