Как я могу преобразовать строку в логическое значение в JavaScript? - PullRequest
2162 голосов
/ 05 ноября 2008

Могу ли я преобразовать строку, представляющую логическое значение (например, 'true', 'false') во внутренний тип в JavaScript?

У меня есть скрытая форма в HTML, которая обновляется на основе выбора пользователя в списке. Эта форма содержит некоторые поля, которые представляют логические значения и динамически заполняются внутренним логическим значением. Однако после помещения этого значения в скрытое поле ввода оно становится строкой.

Единственный способ определить логическое значение поля после его преобразования в строку - это зависеть от литерального значения его строкового представления.

var myValue = document.myForm.IS_TRUE.value;
var isTrueSet = myValue == 'true';

Есть ли лучший способ сделать это?

Ответы [ 74 ]

2 голосов
/ 08 апреля 2019

Если вы уверены, что испытуемый всегда является строкой, то лучше всего проверить, равняется ли он true.

Возможно, вы захотите включить дополнительный бит кода на тот случай, если субъект действительно может быть логическим.

var isTrueSet =
    myValue === true ||
    myValue.toString().toLowerCase() === 'true';

Это может сэкономить вам немного работы в будущем, если код будет улучшен / подвергнут рефакторингу для использования фактических логических значений вместо строк.

2 голосов
/ 29 апреля 2017

Вот простая функция, которая сделает свое дело,

   function convertStringToBool(str){
        return ((str === "True") || (str === "true")) ? true:false;
    }

Это даст следующий результат

convertStringToBool("false") //returns false
convertStringToBool("true") // returns true
convertStringToBool("False") // returns false
convertStringToBool("True") // returns true
2 голосов
/ 25 июля 2017

вы можете использовать:

 var    trueOrFalse='True';
    result =JSON.parse(trueOrFalse.toLowerCase());
    if(result==true)
      alert('this is ture');
    else 
     ('this is false');

в этом случае .toLowerCase важен

2 голосов
/ 06 января 2017

Я использую этот простой подход (используя «myVarToTest»):

var trueValuesRange = ['1', 1, 'true', true];

myVarToTest = (trueValuesRange.indexOf(myVarToTest) >= 0);
2 голосов
/ 29 апреля 2016

Здесь много причудливых ответов. Действительно удивлен, что никто не опубликовал это решение:

var booleanVal = toCast > '';

В большинстве случаев это принимает значение true, кроме bool false, числа ноль и пустой строки (очевидно) Вы можете легко искать другие строковые значения фальши после факта, например ::1004

var booleanVal = toCast > '' && toCast != 'false' && toCast != '0';  
2 голосов
/ 10 июля 2013

Вот моя 1 строка представления: мне нужно было оценить строку и вывод, true, если 'true', false, если 'false', и число, если что-нибудь вроде '-12.35673'.

val = 'false';

val = /^false$/i.test(val) ? false : ( /^true$/i.test(val) ? true : val*1 ? val*1 : val );
2 голосов
/ 23 марта 2016
function isTrue(val) {
    try {
        return !!JSON.parse(val);
    } catch (e) {
        return false;
    }
}
1 голос
/ 27 сентября 2011
function returnBoolean(str){

    str=str.toString().toLowerCase();

    if(str=='true' || str=='1' || str=='yes' || str=='y' || str=='on' || str=='+'){
        return(true);
    }
    else if(str=='false' || str=='0' || str=='no' || str=='n' || str=='off' || str=='-'){
        return(false);
    }else{
        return(undefined);
    }
}
1 голос
/ 23 июня 2013
    MyLib.Convert.bool = function(param) {
         var res = String(param).toLowerCase();
         return !(!Boolean(res) || res === "false" || res === "0");
     }; 
1 голос
/ 05 ноября 2008

Если есть какой-то другой код, который преобразует логическое значение в строку, вам нужно точно знать, как этот код хранит значения true / false. Либо это, либо вам нужен доступ к функции, которая обращает это преобразование.

Существует бесконечно много способов представления логических значений в строках («истина», «Y», «1» и т. Д.). Поэтому вам не следует полагаться на какой-либо универсальный преобразователь строки в логическое значение, например, Boolean (myValue). Вам нужно использовать процедуру, которая обращает исходное преобразование логическое-строковое, что бы это ни было.

Если вы знаете, что он преобразует истинные логические значения в «истинные» строки, тогда ваш пример кода в порядке. За исключением того, что вы должны использовать === вместо ==, чтобы не было автоматического преобразования типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...