Почему это происходит, когда я делаю
(!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, тогда оно объясняет проиллюстрированную логику.