У вас включен AdBlock или иной блокировщик рекламы.

Пожалуйста, отключите его, доход от рекламы помогает развитию сайта и появлению новых статей.

Спасибо за понимание.

В другой раз
DevGang блог о програмировании
Авторизоваться

Временами JavaScript может быть немного странным 

Фото Штефана Штефанчика на Unsplash
Фото Штефана Штефанчика на Unsplash

JavaScript - отличный язык, который стал намного популярнее за последние несколько лет. Благодаря простому синтаксису и большой экосистеме, это отличный язык для начинающих.

В то же время мы все знаем, что JavaScript - довольно забавный язык с множеством хитрых частей. Иногда мы смеемся над всеми этими сложными ситуациями, но некоторые из них могут быстро превратить вашу повседневную работу в ад.

В этой статье мы рассмотрим пять из этих забавных и хитрых примеров JavaScript, чтобы показать вам, что временами JavaScript может быть немного странным - и в большинстве случаев без веской причины.

1. NaN это не число

Как мы все знаем, NaN означает «не число». Но если мы посмотрим на это поближе, разве это не число? Давайте посмотрим на следующий пример.

typeof NaN; // 'number'

Как вы можете видеть, NaN имеет тип number.

2. [] и null являются объектами

[] и null являются объектами. Мы можем проверить это с помощью следующего фрагмента кода:

typeof []; // 'object'
typeof null; // 'object'

Однако, как только мы используем instanceof, чтобы проверить, является ли null объектом, мы получаем false.

null instanceof Object; // false

Ответ на это странное поведение заключается в том, как работает функция typeof.

3. Math.max() меньше чем Math.min()

Чего ждать? Давайте прочитаем это снова. Math.max меньше, чем Math.min? Это абсолютно бессмысленно.

Мы, наверное, все использовали функции Math.min и Math.max хотя бы раз в нашей жизни. Когда вы передаете некоторые параметры функции min и max, они оба работают нормально - все работает как положено.

Math.min(1, 4, 7, 2); // 1
Math.max(1, 4, 7, 2); // 7

Но как только вы пропустите параметры, все будет немного изменено. И не в лучшую сторону. После того, как вы не передадите никакие параметры в функции Math.min и Math.max, они будут возвращать Inifinity и -Inifinity, соответственно.

Math.min(); // Infinity
Math.max(); // -Infinity
Math.min() > Math.max(); // true

4. Сравнение null с 0

Следующие выражения, кажется, вводят противоречие. При сравнении null с 0 с использованием оператора равенства или больше оба возвращают false. Но при объединении этих операторов будет возвращено true.

Это не имеет смысла, верно?

null == 0; // false
null > 0; // false
null >= 0; // true

5. [] это истина, но не true

Массив является истинным значением. Однако это не равно true.

!![]; // true
[] == true; // false

И то же самое относится к нулю - ноль - это ложь, но не false.

!!null; // false
null == false; // false

Источник:

#JavaScript
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться