Задать вопрос
splincodewd
@splincodewd
Developer

Почему интерпретатор указывает нам в выводе тип number?

Провалил на собеседовании этот момент, я так и не понял на уровне основ программирования, почему именно number? Есть описание как это должно работать?

document.body.innerHTML = typeof (1 / []);

Дома потестировал:
// при работе с нулевым указателем
document.body.innerHTML  = "1. " +  typeof (1 / undefined) + "<br>";
document.body.innerHTML += "2. " + typeof (1 * null) + "<br>";
document.body.innerHTML += "3. " + typeof (1 / void 0) + "<br>";

// при работе с типами данных
document.body.innerHTML += "4. " + typeof (1 / String) + "<br>";
document.body.innerHTML += "5. " + typeof (1 * Number) + "<br>";
document.body.innerHTML += "6. " + typeof (1 - Array) + "<br>";
document.body.innerHTML += "7. " + typeof (1 + Object) + "<br>";

// при работе с прототипами
document.body.innerHTML += "8. " + typeof (1 * new function(){}) + "<br>";
document.body.innerHTML += "9. " + typeof (1 / function(){}) + "<br>";

// при работе с объектами
document.body.innerHTML += "10. " + typeof (1 / []) + "<br>";
document.body.innerHTML += "11. " + typeof (1 * []) + "<br>";
document.body.innerHTML += "12. " + typeof (1 / {}) + "<br>";
document.body.innerHTML += "13. " + typeof (1 * {}) + "<br>";


1. number
2. number
3. number
4. number
5. number
6. number
7. string
8. number
9. number
10. number
11. number
12. number
13. number
  • Вопрос задан
  • 165 просмотров
Подписаться 1 Оценить Комментировать
Решение пользователя Денис К ответам на вопрос (6)
Deonisius
@Deonisius
Родился в 11110110111 году, 11000 января.
Неявное численное преобразование примитивов. Если простым языком, то во время математических операций, операнды преобразовываются к числовым типам. Исключением в JS является сложение строковых значений, если их не получилось преобразовать к числовым. В этом случае, мы получим на выходе строку. С другим оператором, в большинстве случаем - NaN
console.log( +[] ); // 0
console.log( 1 / [] ); // Infinity, т.к. исходя из примера выше, +[] === 0, т.е. деление на 0
console.log( 'A' + [] ); // A
console.log( 'A' - [] ); // NaN


P.S. И по поводу Infinity:
Глобальное свойство Infinity является числовым значением, представляющим бесконечность.
Ответ написан
Комментировать