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

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

Если вы знаете JavaScript, вы должны знать NaN. NaN - это переменная в глобальной области видимости, которая означает «Not a Number». Что ж, технически его тип - это число в соответствии с JavaScript, что может сбить с толку новичков.

Как что-то может быть числом, а не числом одновременно? Думаю, это вопрос на миллион долларов. :)

typeof NaN; //returns 'number'

2. Math.min () больше Math.max ().

Math.min() > Math.max(); //returns true

Это кажется нелепым, но если вы разрушите структуру каждой стороны и посмотрите на ее значения, тогда это приобретет смысл.

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

3. Array.prototype.sort () может дать не то, что вы ожидаете!

Вы можете быть уверены, что можете использовать sort () для сортировки целочисленного массива и получения ожидаемых результатов. Что ж, вот где JavaScript решает разыграть свои трюки. Посмотри.

[140000, 104, 99].sort(); //returns [104, 140000, 99]

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

var arr = [140000, 104, 99];
arr.sort(function(a, b) {
  return a - b;
});

4. «Логическая математика». О, парень!

Рассмотрим следующий пример,

(true + true + true) * (true + true) + true; //returns 7

Выглядит странно? Что ж, об этом легко догадаться. «Истина» истинна, как и 1. Таким образом, «истина» будет приведена к 1, а затем простое арифметическое выражение для решения, которое приведет к 7.

5. NaN не является NaN

NaN === NaN; //returns false

Хотя обе стороны NaN === NaN содержат одно и то же значение и имеют тип Число, они не совпадают. Если одна сторона равна NaN по отношению к оператору строгого равенства, окончательный результат будет ложным в соответствии со спецификациями ECMA-262. Подробнее об этом можно прочитать здесь.

Ну вот и все для статьи. Надеюсь, вам понравилось это читать. Следите за второй частью. Увидимся в следующий раз!