Типы данных

Существуют простые и сложные типы данных.

Простые – числа (Number), строки (String)
Сложные – массив (Array), объекты (Object)

Почему одни простые, а другие – сложные? Все дело в том, как программа взаимодействует с ними.
Когда мы передаем простые данные в функцию, то перед началом работы функции создается локальная переменная с именем, указанным в параметрах (пример: function func(a) {}. a – локальная переменная для этой функции). В эту переменную копируется значение передаваемого параметра в случае работы с простыми данными, а в случае со сложными данными – копируется ссылка из памяти компьютера. Что это значит? Когда мы скопировали значение, то мы не изменим первичную переменную. Если мы скопировали ссылку, то мы будем работать с одним и тем же объектом.

Пример:
Спойлер Скриншот:



Null и глобальные свойства

null – специальный объект, который обозначает отсутствие объекта (подробнее будет рассмотрен позднее)
arguments - Локальная переменная arguments доступна внутри функций. Вы можете обращаться к аргументу по номеру, начиная от 0. При этом arguments содержит не объявленные, а реально переданные аргументы.

Пример:
Спойлер Скриншот:

Таким образом, в функцию можно передать больше параметров, чем она принимает, но получить доступ к этим параметрам можно только с помощью arguments.

NaN - Не-Числовое значение. Как правило, оно используется для обозначения ошибки при математических операциях. Вместо генерации исключения, функция возвращает NaN. Значение NaN не равно никакому другому числу, включая само NaN. Чтобы проверить переменную на NaN, используйте специальную функцию isNaN.

Важно! Эта функция полезна, так как значение NaN не может быть проверено операторами эквивалентности. Значение x == NaN и x === NaN всегда false для любого x, даже если x=NaN.

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

Пример:
Код:
var a; // a будет undefined
var a = undefined; // a будет undefined

Условия

Разница между операторами
== и === различаются по своей работе.
== используется для сравнения данных с преобразованием типов данных
=== используется для сравнения без преобразования типов данных

Явное и неявное преобразование данных
Явное преобразование – можно конкретно увидеть в коде (пример: var a = Number(‘1’); String ‘1’ преобразуется в 1 с помощью конструктора Number)
Неявное преобразование – нельзя увидеть в коде

Пример:
Спойлер Скриншот:


Разница сравнения null и undefined
Спойлер Скриншот:


Но
Спойлер Скриншот: