Мои задачи по Javascript
Случайная задача
Список всех задач

Задача 12

Задача на знание различных особенностей JavaScript.
let arr = [];
let obj = {};
let x = 5 * 'два';
let y = NaN;

let i = 0;

if (typeof arr === 'array') { i++; }
if (typeof obj === 'object') { i++; }
if (x === NaN) { i++; }
if (x === y) { i++; }
if ([5] === ['5']) { i++; }
if ([5] == ['5']) { i++; }
if (4 > 3 > 2) { i++; }
if (1+1 < 3 > 2) { i++; }

console.log(i); //  ??
Чему равен i d конце?
1
2
3
4
5
6
7
8
9
10
← Задача 11Задача 13 →
Пояснение Пройдемся по порядку.

Оператор typeof для массива возвращает строку 'object', потому что массив - это тоже объект. Массив вообще не является отдельным типом, читайте: JavaScript data types and data structures на MDN.
Для проверки на массив необходимо использовать Array.isArray().

if (typeof obj === 'object') { i++; } - это единственная строка, где было увеличение значения i.

5 * 'два'; возвратило NaN, потому что второй операнд в операции умножении - строка, которую нельзя преобразовать в число.
В JavaScript NaN не равно даже самому себе, это нужно просто запомнить. Поэтому в строках ниже в if-сравнениях получается false:
if (x === NaN) { i++; } // тут получилось if (false)
if (x === y) { i++; } // тут получилось if (false)

Эти строчки не имеют особого смысла:
if ([5] === ['5']) { i++; }
if ([5] == ['5']) { i++; }
Все массивы - это объекты, а каждый объект - это уникальная сущность, которая может быть равна только самой себе.

Эти строчки сбивают с толку своей кажущейся математической записью:
if (4 > 3 > 2) { i++; }
if (1+1 < 3 > 2) { i++; }
Интерпретатор разбирает выражение слева направо. Причем в математических операциях boolean-значения, т.е. true и false преобразуются в 1 и 0 соответственно.
Пример разбора выражения интерпретатором:
1+1 < 3 > 2
2 < 3 > 2
true > 2
1 > 2
false



Написать сообщение - отзыв, пожелание и т.п.