В Javascript существует несколько вариантов преобразовать строку в логический тип. Тем не менее, вы должны быть очень осторожны: это может нарушить логику вашего приложения и привести к непредвиденным ошибкам. И так для того чтобы избежать этих ошибок, была написана эта статья.
- Вы можете использовать оператор 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/