#javascript #if-statement #type-coercion
Вопрос:
Насколько я понимаю !!
, это предпочтительный способ убедиться, что значение имеет логический тип. Поэтому есть много случаев, когда !!
было бы целесообразно использовать. Однако в if
инструкции не было бы излишним использовать !!
значение, поскольку if
операторы уже проверяют истинность?
var user = 'username123'
if (!!user) {
// arbitrary code
}
Итак, я знаю, что использовал здесь строку, но на самом деле не должно иметь значения, какого типа переменная, потому что я исходил из предположения, что весь смысл использования !!
заключается в том, чтобы обеспечить логический тип. Другими словами, !!user
это просто другой способ действий Boolean(user)
. После внимательного прочтения документов MDN If..else
кажется довольно ясным, что if
утверждения уже делают это. Почему же тогда существует необходимость во !!
внутреннем if
заявлении? Или я ошибаюсь и !!
действительно преобразует значения в логический тип более точно или по-другому, чем принудительное приведение типа, выполненное if
заявление? Или это один из тех случаев, когда я в основном прав, но есть исключения, когда преобразования приведут к различным логическим значениям?
Комментарии:
1. Да, это излишне.
2. это просто код ниндзя, добавлено 2 символа вместо 9 ; в основном используется для троичных операторов, дьявола нет
3. Это избыточно до тех пор, пока вам явно не понадобится логическое значение, поэтому в единственном числе проверьте правдивость. Но есть сравнения, которые приведут к неожиданным результатам, если их явно не принудить, т. е.
([] == false) // -> true
где как(!![] == false) //-> false
Ответ №1:
Да, это излишне. Условие if
инструкции всегда принудительно приводится к логическому значению. То же самое относится и к троичным операторам.
Комментарии:
1. Ладно, я так и думал. Спасибо. У меня есть еще один связанный с этим вопрос. Если вы используете тернарный оператор, например
user ? true : false
, это также приведет к тому же результату,!!user
что и . Я думаю, мой вопрос в том, обеспечивает ли тернарный?
оператор также логический тип?2. @privacyважный Да, это так.