HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Прежде всего давайте вспомним что вообще делает восклицательный знак в обычных ситуациях. Он является логическим оператором "не". Простой пример, проверяем что выражения между собой равны:</p>
1 <p>Прежде всего давайте вспомним что вообще делает восклицательный знак в обычных ситуациях. Он является логическим оператором "не". Простой пример, проверяем что выражения между собой равны:</p>
2 <p>Если хотим проверить что они не равны, то добавляем восклицательный знак:</p>
2 <p>Если хотим проверить что они не равны, то добавляем восклицательный знак:</p>
3 <p>То есть мы "перевернули" (инвертировали) проверку. Примерно то же самое происходит, когда мы добавляем восклицательный знак перед любым выражением:</p>
3 <p>То есть мы "перевернули" (инвертировали) проверку. Примерно то же самое происходит, когда мы добавляем восклицательный знак перед любым выражением:</p>
4 <p>Обратите внимание, перед myVar стоит восклицательный знак, это отрицание, то есть можно прочитать это как "<strong>не</strong>myVar". Восклицательный знак инвертирует наше выражение, которое является строкой 'test'. Но тут возникает вопрос: а что является не строкой 'test'? Если подойти к вопросу философски, то можно найти бесконечное множество вещей, которые являются не строкой 'test'. Но у интерпретатора JS на этот счёт есть чёткое правило: он вычисляет выражение справа от восклицательного знака так, чтобы получить либо true, либо false, то есть приводит к булевому типу. Строка 'test' приводится к булевому типу и вычисляется как true, а восклицательный знак инвертирует, то есть переворачивает true на false, так как false является противоположностью true.</p>
4 <p>Обратите внимание, перед myVar стоит восклицательный знак, это отрицание, то есть можно прочитать это как "<strong>не</strong>myVar". Восклицательный знак инвертирует наше выражение, которое является строкой 'test'. Но тут возникает вопрос: а что является не строкой 'test'? Если подойти к вопросу философски, то можно найти бесконечное множество вещей, которые являются не строкой 'test'. Но у интерпретатора JS на этот счёт есть чёткое правило: он вычисляет выражение справа от восклицательного знака так, чтобы получить либо true, либо false, то есть приводит к булевому типу. Строка 'test' приводится к булевому типу и вычисляется как true, а восклицательный знак инвертирует, то есть переворачивает true на false, так как false является противоположностью true.</p>
5 <p>Теперь гораздо легче понять что делают два восклицательных знака:</p>
5 <p>Теперь гораздо легче понять что делают два восклицательных знака:</p>
6 <p>Интерпретатор пытается вычислить сначала !content. Если content будет ложным выражением, то вычислится true, если истинным, то false. А второй восклицательный знак переворачивает true на false, а false на true. В итоге, если контент существует, то функция вернёт true, а если не существует, то false.</p>
6 <p>Интерпретатор пытается вычислить сначала !content. Если content будет ложным выражением, то вычислится true, если истинным, то false. А второй восклицательный знак переворачивает true на false, а false на true. В итоге, если контент существует, то функция вернёт true, а если не существует, то false.</p>
7 <p>Теперь возникает вопрос: зачем вообще это нужно? Это делается чтобы мы всегда работали с определённым типом. Такой хитрый способ позволяет нам добиться чтобы функция всегда возвращала булевый тип. Любое значение будет преобразовываться в этот булевый тип. Это называется<strong>приведение типов</strong>.</p>
7 <p>Теперь возникает вопрос: зачем вообще это нужно? Это делается чтобы мы всегда работали с определённым типом. Такой хитрый способ позволяет нам добиться чтобы функция всегда возвращала булевый тип. Любое значение будет преобразовываться в этот булевый тип. Это называется<strong>приведение типов</strong>.</p>