Как преобразовать строку в логический тип?

В Javascript существует несколько вариантов преобразовать строку в логический тип. Тем не менее, вы должны быть очень осторожны: это может нарушить логику вашего приложения и привести к непредвиденным ошибкам. И так для того чтобы избежать этих ошибок, была написана эта статья.

  1. Вы можете использовать оператор if(myString). Например:
var myString = true;
 
if (myString) {
    // этот блок выполнится. т.к. myString = "true" и это верно
}
 
if (!myString) {
    // о нет! И этот блок выполнится. Почему? Потому-что if(!myString)
    // проверяет только существование myString, но не его истину.
}

Как я уже говорил, if(!myString) возвращает true, потому-что выражение проверяется только на существование (например чтоб оно не равнялось null или undefined).

2. Что к примеру если создать логический тип из строки?

Почему бы не создать логический тип из строки? Давайте возьмём задачу из предыдущего примера:

var myString = "true";
 
if(Boolean(myString)) {
    // очень хорошо, это выражение выполнится как истина корректно
}
 
if(!Boolean(myString)) {
    // и это выражение выполнится правильно. Наша проблема решена!
}
 
var myOtherString = "false";
 
if(Boolean(myOtherString)) {
    // ...или? Это выражение тоже выполнится как истина, хотя мы присвоили ему "false"
}

Как вы видите, if(Boolean(“false”)) выполняется как истина, почему? Когда вы создаёте логический тип из строки, выражение не проверяется на «true» или «false». Вместо этого, и скорей всего не правильно, проверяется не является ли выражение false (например 0, false, undefined, пустая строка, null и т.д.) Получается что myOtherString не является пустой строкой, хоть мы ей и присвоили значение false.

3. Ок, давайте попробуем сравнивать нашу строку со строкой «true»

Действительно, наиболее правильным вариантом будет сравнивать нашу переменную со строкой «true», если та то выражение истинно, в противном случае выражение будет false. Мы можем сделать это таким образом:

var myString = "true";
 
if(myString == "true") {
    // это выражение выполнится правильно
}
 
if(myString == "false") {
    // это выражение так же выполнится правильно, т.к. myString не равно "false"
}

Замечательно, похоже, наша проблема решена! Но знаете что? Этот код немного избыточен, и слишком длинный для простой проверки на истину. Давайте немного сократим его:

myString = (myString == "true");

Источник: http://heyjavascript.com/javascript-string-to-boolean/

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *