
Содержание статьи
Кевин Кононенко

Если вы когда-нибудь смотрели телешоу о суде (или были в суде), вы можете понять логические значения JavaScript.
Вы можете подумать, что логическое значение является самой простой темой, которую вы можете спросить в JavaScript.
В конце концов, поскольку переменная может быть любой из следующего:
- номер
- строка
- массив
- объект
- логическое значение
…кажется, что логическое значение самое простое.
let bool = true;
let bool= false;
Есть только два варианта для логического значения true
или false
. И они используются в if()
операторы, чтобы решить, какой оператор должен быть выполнен.
if(true){
}
else{
// if value is false, this block runs
}
Но вот в чем дело. Внутри if()
инструкции, другие значения переменных могут оценить на истину или ложь. Другими словами, как только значение используется в if()
JavaScript оценит, так ли это true
или false
.
Например, знаете ли вы, есть ли значение 0 true
или false
?
Это не философский вопрос. У JavaScript есть ответ.
В любом случае, это происходит потому, что JavaScript есть a слабо набранный язык. Это означает, что в контексте an if()
оператор, он преобразует другие значения переменных в true
или false
чтобы запустить код. Это известно как определение «истинности» ценности.
Много других языков есть сильно типизированныйпоэтому они не будут превращать значение в истину или ложность.
Это может показаться немного безумным, но на самом деле это очень похоже на то, как судья в Соединенных Штатах определяет, обвиняемый ли невиновным или виновным. Итак, я могу объяснить, как это «правдивость» и true
/false
работает в JavaScript через юридические нормы, которые вы видели в «Законе и порядке» или любые другие судебные процессуальные драматургии по телевизору.
Для целей этого учебника представьте, что вы — окружной прокурор, пытающийся привлечь к ответственности лицо, обвиняемое в краже автомобиля.
И вам понадобится понять основы переменных JavaScript, чтобы воспользоваться этим учебником. Давайте разберемся!
Что такое «истинность» в JavaScript?
В Соединенных Штатах система уголовного права утверждает, что обвиняемый «невиновен, пока его вина не будет доказана». Это означает, что на прокурора (в данном случае на вас) лежит бремя предоставить достаточное количество доказательств, чтобы опровергнуть предположение по умолчанию о невиновности обвиняемого.
На самом деле стандарт доказательств «вне разумного сомнения». Это постоянно во многих странах мира.
Когда мы используем if()
мы не всегда сможем подключить переменную со значением true
или false
. Много раз мы должны подключать оператор, который будет оценивать JavaScript. как true
или false
.
Это похоже на правовую систему! Хотя это так Возможно что будет одно доказательство, которое делает вердикт «виновным» или «невинным» очевидным, также вероятно, что судье или присяжному придется оценить несколько доказательств и принять решение.
Начнём с основ. А true
заявление является доказательством, которое приведет к осуждению обвиняемого. А false
заявление является доказательством, которое позволит им свободно ходить. Давайте создадим переменную под названием evidence
и установите его true
.
let evidence = true;
if (evidence){
convict();
}
else{
release();
}
convict()
и release()
являются вымышленными функциями. В данном случае, поскольку доказательства установлены до true
, судья осудил бы автовор. Вот интерактивная диаграмма этого сценария.


Грабитель чем-то похож на Эдварда Нортона из «Итальянской работы», да?
Во всяком случае, в реальной жизни это никогда не бывает так просто. Предположим, у вас есть убийственное доказательство – отпечатки пальцев из дверей автомобиля. Вы предъявляете это судье.
let evidence = "fingerprints";
if (evidence){
convict();
}
else{
release();
}
Ага! Мы изменили только первую строчку, где мы объявили переменные доказательства. И теперь это строчка, а не логическое значение. Но угадайте что? Из-за тип принужденияJavaScript оценит строку как true
. Поскольку нет условий внутри if()
оператор, все строки есть true
. Мы бы запустили convict()
функция!
Примеры правдивости
Представим, что вместо этого для переменной доказательств установлено значение 0
. Мы бегаем так же if()
снова заявление.
let evidence = 0;
if (evidence){
convict();
}
else{
release();
}
В этом случае утверждение фактически будет оцениваться до false
и наш обвиняемый автовор был бы уволен.
Вот почему это называется «истинностью», поскольку JavaScript оценивает, есть ли условие true
или false
.
Поскольку переменная установлена 0
это если бы вас попросили предоставить доказательства против вора, а вы сказали… ничего.
Очевидно, судья определит, что у вас недостаточно доказательств, и уволит человека! То же произойдет, если для доказательств установлена пустая строка ``
. Вы все еще ничего не предлагаете, поэтому ваше заявление оценивается как false
.
let evidence="";
Вот еще один тест, чтобы проверить, понимаете ли вы true
против false
. Что делать, если переменная еще не была инициализирована значением?
let evidence;
if (evidence){
convict();
}
else{
release();
}
Это довольно распространенный вариант, потому что веб-разработчики будут иметь другой оператор в своем сценарии, который придает значение evidence
переменный. И, как и в двух примерах выше, JavaScript будет оценивать эту переменную как false
если он не имеет никакой ценности.
Это отличный пример «невинности, пока вина не будет доказана». Переменной еще не присвоено значение, поэтому JavaScript не может вызвать ее true
.
Использование элементов DOM в операторах if().
Итак, мы рассмотрели значение переменных, которые являются «ложными». Но как насчет элементов из DOM?
Примечание: если вам нужно обновление, просмотрите мое руководство по элементам DOM здесь.
Другими словами, что происходит, когда мы используем элемент DOM, чтобы определить, какую ветвь файла if/else
заявление баллотироваться? Если вы используете jQuery или React (или Angular и т.д.), вы, вероятно, манипулируете DOM, чтобы создать более динамичный интерфейс.
В нашем примере с залом суда, допустим, вы клянитесь, что отмычка, которую использовал вор, находится в мусорном баке вблизи места преступления. В терминах HTML вы говорите, что существует div с идентификатором lockpick
где-то в DOM. Как судья может подтвердить ваше требование?
if(document.getElementById('lockpick')){
convict()
}
else{
release()
}
Вот интерактивное изображение этого сценария.


«Истинность» здесь означает, что JavaScript проверит DOM и только вернет true
если он найдет элемент с идентификатором lockpick
. Это как судья, который определяет, есть ли доказательства, которые вы предоставляете, подлинными и подлинными. В этом случае это так, поэтому первый блок кода запустится, и человек будет осужден.
Это очень полезно! Теперь мы расширили концепцию true
так, чтобы он включал, существует ли элемент или нет. Эта логика также относится к объектам и массивам. Вы можете проверить, существует ли элемент с определенным классом или есть у определенного элемента дочерние, вы поняли.
Больше вариантов операторов if().
Когда вы доставите обвиняемого в суд, его все равно могут осудить за преступление. Если у вас недостаточно доказательств по основному обвинению, они все равно могут быть осуждены по меньшим обвинениям.
В примере угона автомобиля говорится о взломе и проникновении преступления, а дальше возможна кража, если обвиняемый уже проник в автомобиль.
Можем комбинировать if()
, else if()
и else()
смоделировать эти параметры. Скажем, обвиняемый сделала ворвался в машину, но ничего не взял. Мы могли бы моделировать следующие варианты:
let breaking = true;
let theft = false;
if (breaking && theft){
convict('felony');
}
else if(breaking){
convict ('misdemeanor');
}
else{
release();
}
Сейчас есть три сценария. Если первое условие выполнено, этот блок кода будет запущен. Это означает, что вор будет осужден за тяжкое преступление. Но, если только значение переменной breaking
можно оценить как true
лицо все равно будет осуждено за проступок.
Судья говорит: «Вы должны показать мне доказательства проникновения и проникновения и воровство, если я собираюсь осудить этого человека за тяжкое преступление».
Первый if()
заявление оценит true && false
которая будет сведена к false
поскольку false
имеет преимущество над true
(помни, невиновен, пока вина не будет доказана).
Это все равно работало бы, если бы мы использовали значения, которые были «истинными» или «ложными». Каждый из них будет оценен true
или false
в пределах if()
оператор, а затем JavaScript решит, какой блок выполнить.
Получите больше наглядных пособий
Вам понравилось это руководство? Дайте ему «хлопок» или зарегистрируйтесь ниже, чтобы получить мои последние учебники по темам веб-разработки.