Почему это происходит, когда я делаю
(!true) ? 'false' : 'true'
он возвращает 'true'?
Почему это происходит, когда я делаю
(!true) ? 'false' : 'true'
он возвращает 'true'?
Это просто означает
if (!true) {
return 'false';
} else {
return 'true';
}
!true (не верно) означает false, поэтому возвращается else.
Синтаксис A ? B : C означает, что если A является TRUE, тогда возвращайте значение B. Else возвращает значение C. Поскольку A является FALSE, оно возвращает значение C, которое бывает true.
Поскольку приведенное выше эквивалентно:
if (false) {
return 'false';
} else {
return 'true';
}
Хотя, возможно, путаница исходит из разницы между:
if (false) // which is false
и
if (false == false) // which is true
Потому что (!true) является ложным, а затем выбирается правая сторона :.
Это можно расходовать на:
if(!true)
{
return 'false';
}
else
{
return 'true';
}
if(!true) эквивалентен if(!true= true), который эквивалентен if(false=true), который равен false. Поэтому return (true), который находится на ложной стороне инструкции if.
Здесь возникает путаница из-за использования строковых литералов для представления булевых значений. Если вы отмените 'false' и 'true', это имеет смысл:
(!true) ? 'true' : 'false'
Вернет строковый литерал false, который сильно отличается от значения boolean.
Ваше исходное утверждение (!true) ? 'false' : 'true' читается как
"Если это не так, верните строковый литерал true".
Утверждение, которое я опубликовал, сначала читается как
"Если не верно, то верните строковый литерал false".
Что, если вы знаете противоположное значение (не), значение true равно false, тогда оно объясняет проиллюстрированную логику.