awesome-everything EN
↑ Обратно к восхождению

Базовый CS с нуля

Значения и типы: чтение кода

Суть Прочитай четыре коротких JS-сниппета и предскажи, что рантайм делает на самом деле: округление float, предел safe integer, тихий coercion и quirk typeof null.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 14 min

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

Цель

Отработай цикл, который запускаешь всякий раз, когда программа печатает неожиданное: определи, какое правило типа рантайм применил к битам, и объясни, почему вывод именно такой, а не тот, что ты сперва предположил.

Сниппет 1 — дробь, которая не сходится

const sum = 0.1 + 0.2;
console.log(sum);            // ?
console.log(sum === 0.3);    // ?
Викторина

Что это печатает и почему?

Сниппет 2 — целое, которое перестаёт считать

const big = 9007199254740991;   // Number.MAX_SAFE_INTEGER
console.log(big + 1);           // ?
console.log(big + 1 === big + 2); // ?
Викторина

Что это печатает и в чём глубинная причина?

Сниппет 3 — плюс, который меняет решение

console.log(5 + "5");   // ?
console.log(5 - "5");   // ?
console.log("5" * 2);   // ?
Викторина

Что печатают три строки и какое правило объясняет различие?

Сниппет 4 — тип, который лжёт

console.log(typeof null);        // ?
console.log(typeof undefined);   // ?
console.log(null === undefined); // ?
Викторина

Что печатает каждая строка и какой результат — исторический quirk?

Итог

Каждый сюрприз здесь — та же идея юнита в костюме JS. Округление float (0.1 + 0.2) и предел safe integer (выше 2^53) оба идут от единого 64-битного IEEE 754 double с конечной точностью — отдельного целочисленного типа, к которому можно отступить, нет. Оператор + конкатенирует со строками, но приводит к числам для - и *, так что динамическая типизация молча выбирает правило типа за тебя. А typeof null возвращает ‘object’ — замороженный исторический баг. Прочитай оператор и формат хранения — и вывод перестаёт быть загадкой.

Продолжить восхождение ↑Значения и типы: собери инспектор значений
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.