Мой взгляд на этот вопрос заключается в том, что он направлен на достижение трех целей:
- Возвращает true / false для значений truey и falsey, но также возвращает true / false для нескольких строковых значений, которые были бы true или false, если бы они были булевыми, а не строковыми.
- Во-вторых, предоставьте упругий интерфейс, чтобы значения, отличные от указанных, не потерпели неудачу, а скорее вернули значение по умолчанию
- В-третьих, делайте все это, используя как можно меньше кода.
Проблема с использованием JSON заключается в том, что он завершается ошибкой, вызывая ошибку Javascript. Это решение не является устойчивым (хотя оно удовлетворяет 1 и 3):
JSON.parse("FALSE") // fails
Это решение недостаточно краткое:
if(value === "TRUE" || value === "yes" || ...) { return true; }
Я работаю над решением этой точной проблемы для Typecast.js . И лучшее решение для всех трех целей это:
return /^true$/i.test(v);
Работает во многих случаях, не дает сбоя при передаче значений типа {} и очень лаконичен. Кроме того, он возвращает значение false в качестве значения по умолчанию, а не неопределенного значения или выдачи ошибки, что более полезно при разработке свободно написанных Javascript. Браво на другие ответы, которые предложили это!