Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window.
Reload to refresh your session.
Русскоязычный сборник задач с автоматической системой проверки JavaScript решений
License
mbelsky/js-problems
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Что делают Junior JavaScript программисты на работе. Типичные задачи Junior
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
9a3b8e1 Apr 6, 2023
fix mistake in third testcase of 4 problem
Git stats
Files
Failed to load latest commit information.
Latest commit message
Commit time
README.md
Оттачивай навыки алгоритмики и кодирования.
В этом репозитории собраны задачи, решение которых поможет закрепить навыки программирования и подготовиться к техническим собеседованиям.
Вместе с задачами поставляется система для автоматической проверки решений написанных на JavaScript.
- Убедись, что git и node v10.13.0+ установлены на твоем компьютере
- Склонируй репозиторий
- В папке с проектом из терминала выполни npm ci
Теперь можно приступать к решению задач!
Задачи находятся в папке /problems. Каждая задача оформлена в виде отдельного .js файла.
Каждый файл имеет следующую структуру:
- Комментарий с
- описанием условия задачи
- примером вызова функции, передаваемых аргументов и ожидаемым результатом
- JSDoc для параметров и возвращаемого функцией значения
- Заглушка тела функции. Пиши свое решение здесь
- Инструкция module.exports = … делает функцию доступной для автоматического тестирования
Система автоматичекой проверки решений может быть запущена в одном из трех режимов.
Кодинг #1. РЕШЕНИЕ задач С ПОЯСНЕНИЕМ в Codewars. JavaScript. Уроки программирования для начинающих
Рекомендуется использовать автоматическую проверку в связке с pre-commit. А каждую решенную задачу оформлять в виде коммита, чтобы не запускать лишние тесты.
npm run test
Эта команда проверит правильность решений для всех файлов в которые были внесены изменения и git статус которых not staged for commit .
npm run test:watch
Эта проверка работает по тому же принципу, что и ручная, только тесты запускаются автоматически на каждое сохранение файла.
При решении задач в IDE Visual Studio Code подключение отладчика происходит в пару кликов:
- В меню среды разработки выбрать View -> Debug . Слева отобразится панель отладчика
- Выбрать Debug js-problems как конфигурацию отладчика (видеоверсия)
- Через меню запустить отладчик Debug -> Start Debugging . git статус отлаживаемого файла должен быть not staged for commit .
Функции JavaScript – Задачи и решения
Осваивайте профессию, начните зарабатывать, а платите через год!
Курсы Python Акция! Бесплатно!
Станьте хакером на Python за 3 дня
Веб-вёрстка. CSS, HTML и JavaScript
Курс Bootstrap 4
Станьте веб-разработчиком с нуля
Функции — ключевая концепция программирования в JavaScript. Важнейшей особенностью JavaScript является его первоклассная поддержка функций (functions as first-class citizen). Любая функция — это объект, и следовательно ею можно манипулировать как объектом и формализовать средствами языка определённую логику поведения и обработки данных.
1. Переверните число задом наперед
Напишите функцию JavaScript, которая переворачивает число.
function reverse_a_number(n) < // Ваш код >; document.writeln(reverse_a_number(258961)); // 169852
2. Проверьте, является ли переданная строка палиндромом или нет
Напишите функцию JavaScript, которая проверяет, является ли переданная строка палиндромом? Палиндром — это слово, фраза или последовательность, которые читаются так же, как вперед, назад, например, level.
function check_Palindrome(str_entry) < // ваш код >check_Palindrome(‘level’); // Запись — палиндром. check_Palindrome(‘topot’); // Запись — палиндром. check_Palindrome(‘that’); // Вход — это не палиндром.
3. Функция, которая генерирует все комбинации строки
Напишите функцию substrings(str) , которая генерирует все комбинации строки.
Пример строки: ‘dog’. Ожидаемый результат: d, o, do, g, dg, og, dog.
function substrings(str) < // Ваш код >substrings(«dog»); // d, o, do, g, dg, og, dog
4. Вернуть переданную строку с буквами в алфавитном порядке
Напишите функцию alphabet_order(str) , которая возвращает переданную строку с буквами в алфавитном порядке. Пример строки: ‘alphabetical’ Ожидаемый результат: ‘aaabcehillpt’ Предположим, что символы пунктуации и цифры не включены в переданную строку.
function alphabet_order(str) < // Ваш код >document.writeln(alphabet_order(«alphabetical»)); // «aaabcehillpt»
5. Найти самое длинное слово в строке
Напишите функцию find_longest_word(str) , которая принимает строку в качестве параметра и находит самое длинное слово в строке.
function find_longest_word(str) < // Ваш код >document.writeln(find_longest_word(‘Web Development Tutorial’)); // «Development»
6. Подсчитать количество гласных в строке
Напишите функцию vowel_count(str) , которая принимает строку в качестве параметра и подсчитывает количество гласных в строке.
function vowel_count(str1) < // Ваш код >document.writeln(vowel_count(‘Web Development Tutorial’)); //9
7. Проверьте, является ли число простым или нет
Напишите функцию test_prime(n) , которая принимает число в качестве параметра и проверяет, является ли число простым или нет. Примечание.
Простое число (или простое число) — это натуральное число больше 1, не имеющее положительных делителей, кроме 1 и самого себя.
function test_prime(n) < . ваш код. >; document.writeln(test_prime(51)); // false
8. Получить тип данных
Напишите функцию detect_data_type(value) , которая принимает аргумент и возвращает тип. Примечание.
Существует шесть возможных значений, которые возвращает typeof: объект, логическое значение, функция, число, строка и неопределенное значение.
function detect_data_type(value) < . ваш код. >; document.writeln(detect_data_type(7)); // number document.writeln(detect_data_type(‘wm-school’)); // string document.writeln(detect_data_type(false)); // boolean
9. Вернуть единичную матрицу n строк и n столбцов.
Напишите функцию matrix(n) , которая возвращает единичную матрицу n строк и n столбцов. Пример вывода:
1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
function matrix(n) < . ваш код. >; matrix(4);
10. Найдите второе наименьшее и второе наибольшее числа из массива
Напишите функцию second_greatest_lowest(arr_num) , которая будет принимать массив сохраненных чисел и находить второе наименьшее и второе наибольшее числа соответственно.
function second_greatest_lowest(arr_num) < . ваш код. >; document.writeln(second_greatest_lowest([8,9,10,11,12])); // 9,11
11. Найдите идеальное число
Напишите функцию JavaScript, которая определяет, идеально ли число.
Согласно Википедии: в теории чисел идеальное число — это положительное целое число, которое равно сумме своих положительных делителей, то есть сумме его положительных делителей, исключая само число (также известное как его аликвота). сумма). Точно так же совершенное число — это число, равное половине суммы всех его положительных делителей (включая само себя). Пример : первое совершенное число — 6, потому что 1, 2 и 3 являются его собственными положительными делителями, а 1 + 2 + 3 = 6. Эквивалентно число 6 равно половине суммы всех его положительных делителей: (1 + 2 + 3 + 6) / 2 = 6. Следующее совершенное число — 28 = 1 + 2 + 4 + 7 + 14. За ним следуют совершенные числа 496 и 8128.
function is_perfect(number) < . ваш код. >; is_perfect(28); // Это идеальное число
12. Найти множители положительного целого числа.
Напишите функцию JavaScript для вычисления множителей положительного целого числа.
function factors(n) < // ваш код >document.writeln(factors(18)); // [1,2,3,6,9,18] document.writeln(factors(19)); // [1,19] document.writeln(factors(20)); // [1,2,4,5,10,20]
13. Преобразование суммы в монеты.
Напишите функцию JavaScript для преобразования суммы в монеты. Пример функции : amount_coins(96, [25, 10, 5, 2,1]) Здесь 96 — сумма, а 25, 10, 5, 2, 1 — монеты. Вывод : 25,25,25,10,10,1
function amount_coins(amount, coins) < // ваш код >document.writeln(amount_coins(96, [25, 10, 5, 2,1])); // 25,25,25,10,10,1
14. Вычислить значение b n, где n — показатель степени, а b — основание.
Напишите функцию JavaScript для вычисления значения b n, где n — показатель степени, а b — основание.
function exp(b,n) < // ваш код >document.writeln(exp(3, 4)); // 81
15. Извлечение уникальных символов из строки
Напишите функцию JavaScript для извлечения уникальных символов из строки.
function unique_char(str) < // ваш код >document.writeln(unique_char(«позволяеткопироватьтекстиз»)); // позвляеткираьс
16. Поиск в массивах JavaScript с помощью двоичного поиска
Напишите функцию для поиска позиции числа в массиве с помощью двоичного поиска. Примечание. При двоичном поиске выполняется поиск, разбивая массив на все меньшие и меньшие части, пока не будет найдено искомое значение.
function binarySearch(value, list) < // ваш код >var myArray = [1, 2, 3, 5, 6, 7, 10, 11, 14, 15, 17, 19, 20, 22, 23]; document.writeln(binarySearch(6, myArray)); // 4
17. Найти элементы массива, которые больше указанного числа
Напишите функцию JavaScript, которая возвращает элементы массива, которые больше указанного числа.
function BiggerElements(val) < // ваш код >var result = [14, 45, 4, 31, 64, 10]. filter(BiggerElements(18)); document.writeln(result); // 45,31,64
18. Cгенерировать строковый идентификатор (строку заданной длины) из случайных символов
Напишите функцию JavaScript, которая генерирует строковый идентификатор (заданной длины) из случайных символов. Пример списка символов: «ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789»
function makeid(l) < // ваш код >document.writeln(makeid(10)); //D6JTZe00HT
19. Поделить строку на фрагменты
Напишите функцию JavaScript, чтобы получить все возможные подмножества с комбинациями фиксированной длины (например, 2) в массиве. Пример массива: [1, 2, 3] и длина подмножества 2. Ожидаемый результат: [[2, 1], [3, 1], [3, 2], [3, 2, 1]]
function subset(arra, arra_size) < // ваш код >document.writeln(subset([1, 2, 3], 2)); // [[2,1], [3,1], [3,2], [3,2,1]]
20. Подсчитать количество вхождений указанной буквы в строке
Напишите функцию JavaScript, которая принимает два аргумента: строку и букву. Функция должна подсчитывать количество вхождений указанной буквы в строке.
function char_count(str, letter) < // ваш код >document.writeln(char_count(‘ww-school.ru’, ‘w’)); // 2
21. Найти первый неповторяющийся символ
Напишите функцию JavaScript, чтобы найти первый неповторяющийся символ.
function find_FirstNotRepeatedChar(str) < // ваш код >document.writeln(find_FirstNotRepeatedChar(‘фывфавыапрс’)); // п
22. Напишите функцию JavaScript для применения алгоритма пузырьковой сортировки.
Напишите функцию JavaScript для применения алгоритма пузырьковой сортировки. Примечание. Согласно википедии «Алгоритм состоит из повторяющихся проходов по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются N-1 раз или до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. При каждом проходе алгоритма по внутреннему циклу, очередной наибольший элемент массива ставится на своё место в конце массива рядом с предыдущим «наибольшим элементом», а наименьший элемент перемещается на одну позицию к началу массива («всплывает» до нужной позиции, как пузырёк в воде — отсюда и название алгоритма).»
function bubble_Sort(a) < // ваш код >document.writeln(bubble_Sort([14, 346, 7, 546, 322, 89, 98, 64, 9, 1, 3223, 455, 23, 234, 213])); // 3223,546,455,346,322,234,213,98,89,64,23,14,9,7,1
23. Самое длинное слово из списка
Напишите функцию JavaScript, которая принимает список названий стран в качестве входных данных и возвращает самое длинное название страны в качестве выходных данных.
function Longest_Country_Name(country_name) < // ваш код >document.writeln(Longest_Country_Name([«Россия», «Украина», «Соединённые Штаты Америки»]));//Соединённые Штаты Америки
24. Найти самую длинную подстроку в заданной строке без повторяющихся символов
Напишите функцию JavaScript, чтобы найти самую длинную подстроку в заданной строке без повторяющихся символов.
function test(s) < // ваш код >document.writeln(test(«wm-school.ru»)); // wm-scho document.writeln(test(«example.com»)); // xample.co
25. Самый длинный палиндром в заданной строке
Напишите функцию JavaScript, которая возвращает самый длинный палиндром в заданной строке Палиндром — это слово или фраза, которые одинаково читаются слева направо и справа налево.
function is_Palindrome(str1) < // ваш код >document.writeln(longest_palindrome(«abracadabra»)); // aca document.writeln(longest_palindrome(«tatarrattat»)); // tarrat
26. Передать функцию JavaScript в качестве параметра
Напишите программу JavaScript для передачи «функции JavaScript» в качестве параметра.
function addFunc(id, refreshCallback) < //ваш код >addFunc(1, refreshFunc); // Hello Function
27. Получить имя функции
Напишите функцию JavaScript, чтобы получить имя функции.
function nameOfFunc() < //ваш код >nameOfFunc(); // nameOfFunc
Комментарии
пожелания к комментариям…
- Приветствуются комментарии, соответствующие теме урока: вопросы, ответы, предложения.
- Одну строчку кода оборачивайте в тег , несколько строчек кода — в теги . ваш код. .
- Допускаются ссылки на онлайн-песочницы (codepen, plnkr, JSBin и др.).
- Строка (String)
- Массив (Array)
- Функция (Function)
- Рекурсия
- Условные операторы и циклы
- Математика и числа
- Дата и время
- Регулярные выражения
Источник: www.wm-school.ru
Задачи по JavaScript для начинающих от Tproger и GeekBrains
Вместе с факультетом Веб-разработки GeekUniversity собрали для вас несколько простых задач по JavaScript для обучения и тренировки, а также пару теоретических вопросов. Задачи расположены в порядке возрастания сложности.
Обратите внимание, что у любой задачи по программированию может быть несколько способов решения. Чтобы посмотреть добавленный нами вариант решения, кликните по соответствующей кнопке.
Задача 1
Напишите однострочное решение, которое вычисляет сумму квадратных корней для всех чётных чисел целочисленного массива.
console.log( // Входной массив [1, 4, 3, 0, 4, 5, 4] // Оставляем только чётные числа .filter(element => !(element % 2)) // Считаем квадратный корень и записываем в аккумулятор .reduceRight((accumulator, element) => accumulator + Math.sqrt(element), 0) ); // 6
Метод reduceRight() применяет функцию к аккумулятору и каждому значению массива (справа налево), сводя его к одному значению. А метод reduce() выполняет функцию callback один раз для каждого элемента, присутствующего в массиве, за исключением пустот, принимая четыре аргумента:
- начальное значение (или значение от предыдущего вызова callback );
- значение текущего элемента;
- текущий индекс;
- массив, по которому происходит итерация.
Задача 2
Напишите функцию, которая пишет в консоль число в заданном диапазоне, в случае, если оно успешно делится или не делится с остатком или без остатка в зависимости от параметров.
function getNumbersModulatordBy(modulus, loggerCallback) < // Функция, которая возвращает функцию — это подход из функционального программирования // Называется замыканием (Closure) return function(start, end) < loggerCallback(< message: «Конфигурация», config: configuration >); loggerCallback(< message: «Полученный модулятор», modulus: modulus >); loggerCallback(< message: «Полученный start и end», start: start, end: end >); while (start start++; > >; > // Глобальный контекст не имеет блочной видимости // В данном случае переменная поднимается выше в самое начало кода // Исполнитель JavaScript видит её в независимости от места инициализации var configuration = < modulus: 10, isEntry: false, start: 45, end: 68 >; var loggerCallback = data => console.log(data); let tenNumbersModulator = getNumbersModulatordBy( configuration.modulus, loggerCallback ); // Переменные с глобальным контекстом доступны из: // 1. globalThis (в Node.js) // 2. window (в браузере) window.configuration.modulus = 5; let fiveNumbersModulator = getNumbersModulatordBy( configuration.modulus, loggerCallback ); tenNumbersModulator(configuration.start, configuration.end); // 50, 60 tenNumbersModulator(10, 100); // 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 // Так как мы изменили поле isEntry, то теперь: // Функция вернёт те значения, которые не входят в модуляцию числа window.configuration.isEntry = true; fiveNumbersModulator(configuration.start, configuration.end); // 46, 51, 56, 61, 66 fiveNumbersModulator(10, 21); // 11, 16, 21
Задача 3
Есть ферма животных, у всех животных есть имена и возраст. Животные бывают разных типов: Кошки, Собаки, Коровы. У каждого животного могут быть дети. Если животное является родителем этих детей, в свою очередь глубина семейного древа может достигать N либо 0 .
Опишите структуры данных для фермы животных и напишите функцию, которая делает подсчёт всех возрастов животных и выводит общий возраст для всей фермы.
// Родительский класс для всех животных class Animal < constructor(name, age, childs = null) < this.name = name; this.age = age; this.childs = childs; >> // Класс Cat — потомок класса Animal // Имеет те же поля, что и Animal class Cat extends Animal < constructor(name, age, childs = null) < super(name, age, childs); >> // Класс Dog — потомок класса Animal // Имеет те же поля, что и Animal class Dog extends Animal < constructor(name, age, childs = null) < super(name, age, childs); >> // Класс Cow — потомок класса Animal // Имеет те же поля, что и Animal class Cow extends Animal < constructor(name, age, childs = null) < super(name, age, childs); >> // Рекурсивная функция для подсчета age // Обходит все дочерние элементы function getAnimalsAge(animals) < let output = 0; if (animals.length >0) < // Использование функции reduce для получения общего age // https://learn.javascript.ru/array-iteration output += animals.reduce((acc, current) => < // Сумма age всех childs let count = 0; // Если childs пустой или его нет, тогда нет смысла пробегать по ним if (current.childs current.childs.length >0) < // Применение рекурсии count += getAnimalsAge(current.childs); >// Возвращаем сумму аккумулятора, текущего животного, сумму age всех childs return acc + current.age + count; >, 0); > return output; > // Функция для получения определённого количества животных function generateAnimals(type, count) < let output = []; for (let i = 0; i $`, age: i, childs: [] >; let item = null; switch (type) < case «Cat»: item = new Cat(parameter.name, parameter.age); break; case «Dog»: item = new Dog(parameter.name, parameter.age); break; case «Cow»: item = new Cow(parameter.name, parameter.age); break; >if (item) < output.push(item); >> return output; > // Добавление childs ко всем переданным животным function addChildsTo(animals, count, type) < animals.forEach(animal => < if (!animal.childs) < animal.childs = []; >// Обратите внимание, что массив — ссылка, поэтому изменяя здесь его поля // мы меняем их глобально animal.childs = generateAnimals(type, count); >); > let cats = generateAnimals(«Cat», 5); addChildsTo(cats, 10, «Cat»); let dogs = generateAnimals(«Dog», 3); addChildsTo(dogs, 3, «Dog»); let cows = generateAnimals(«Cow», 7); addChildsTo(cows, 1, «Dog»); // Использование оператора Spread (ES6) // https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Spread_syntax let animals = [. cats, . dogs, . cows]; console.log(getAnimalsAge(animals)) // 411
Задача 4
Перепишите функцию clone таким образом, чтобы она была способна клонировать переданный как параметр объект.
let animal = < name: «animal», age: 10, childs: [«child 1», «child 2»] >; let cat = clone(animal); cat.name = «cat»; cat.age = 5; cat.childs.push(«child 3»); console.log(cat.name, cat.age); // cat 5 console.log(cat.childs); // [ ‘child 1’, ‘child 2’, ‘child 3’ ] console.log(animal.name, animal.age); // cat 5 console.log(animal.childs); // [ ‘child 1’, ‘child 2’, ‘child 3’ ] function clone(obj)
Deep copy (глубокое копирование)
console.log(cat.name, cat.age); // cat 5 console.log(cat.childs); // [ ‘child 1’, ‘child 2’, ‘child 3’ ] console.log(animal.name, animal.age); // animal 10 console.log(animal.childs); // [ ‘child 1’, ‘child 2’ ] // Отличный вариант для JSON-safe объектов let clone = (obj) => JSON.parse(JSON.stringify(obj)); // Опасен для рекурсивных объектов или когда имеется конструктор с параметрами let clone = obj => < if (obj === null || typeof obj !== «object» || «isActiveClone» in obj) return obj; if (obj instanceof Date) var temp = new obj.constructor(); //or new Date(obj); else var temp = obj.constructor(); for (var key in obj) < if (Object.prototype.hasOwnProperty.call(obj, key)) < obj[«isActiveClone»] = null; temp[key] = clone(obj[key]); delete obj[«isActiveClone»]; >> return temp; >;
Experimental deep copy (экспериментальное глубокое копирование)
Как пишут на Stack Overflow, HTML-стандарт включает в себя алгоритм структурированного клонирования, который может создавать глубокие копии объектов. Он всё ещё ограничен встроенными типами, но в дополнение к тем типам, что поддерживаются в JSON, поддерживает Dates, RegExps, Maps, Sets, Blobs, FileLists, ImageDatas, Sparse Arrays, Typed Arrays и, вероятно, больше в будущем. Решает также проблемы цикличных и рекурсивных структур, которые ломают JSON.
console.log(cat.name, cat.age); // cat 5 console.log(cat.childs); // [ ‘child 1’, ‘child 2’, ‘child 3’ ] console.log(animal.name, animal.age); // animal 10 console.log(animal.childs); // [ ‘child 1’, ‘child 2’ ] let clone = (obj) => require(«v8»).deserialize(require(«v8»).serialize(obj));
Shallow copy (поверхностное копирование)
Клонирование вложенных свойств по ссылке пропускается, нужно быть осторожным в использовании.
console.log(cat.name, cat.age); // cat 5 console.log(cat.childs); // [ ‘child 1’, ‘child 2’, ‘child 3’ ] console.log(animal.name, animal.age); // animal 10 console.log(animal.childs); // [ ‘child 1’, ‘child 2’, ‘child 3’ ] // Копирует значение всех собственных итерируемых элементов объекта let clone = (obj) => Object.assign(new Object(), obj); // Более известен как оператор Spread let clone = (obj) => < . obj >;
Задача 5
Выйдите из цикла, изменив только две отмеченные строки. Результат в консоли сейчас останавливается на 9 9 . Должен на 5 4 .
for (let i = 0; i < 10; i++) < //! Эту строку можно изменить for (let j = 0; j < 10; j++) < if (i === 5 j === 5) < //! Эту строку можно изменить >console.log(i, j); > >
Как пишут на MDN web docs, инструкция метки (label) используется вместе с break или continue для альтернативного выхода из цикла. Метка добавляется перед блочным выражением в качестве ссылки, которая может быть использована в дальнейшем.
cycle: for (let i = 0; i < 10; i++) < //! Эту строку можно изменить for (let j = 0; j < 10; j++) < if (i === 5 j === 5) < break cycle; //! Эту строку можно изменить >console.log(i, j); > >
Задача 6
Яблоко стоит 1.15, апельсин стоит 2.30. Сколько они стоят вместе – чему равна сумма 1.15 + 2.30 с точки зрения JavaScript?
Число хранится в памяти в бинарной форме, как последовательность бит – единиц и нулей. Но дроби, такие как 1.15, 2.30, которые выглядят довольно просто в десятичной системе счисления, на самом деле являются бесконечной дробью в двоичной форме. Это объяснение взято с сайта Современный учебник JavaScript, там же можно подробно почитать про числа в языке.
Задача 7
Чему равен typeof null в режиме use strict ?
Все JavaScript-программисты давно привыкли к тому, что typeof null === ‘object’; // true , хотя фактически null — примитивное значение. Многие знают, что это баг, и лично Брэндан Айк это признаёт. Этот баг, вероятно, никогда не будет исправлен из-за необходимости сохранения обратной совместимости существующего кода с новыми версиями языка.
Хотите вырасти от новичка до профессионала? Факультет Веб-разработки GeekUniversity даёт полтора года опыта для вашего резюме. Обучайтесь на практических заданиях, по-настоящему освойте фулстек-разработку и станьте ближе к профессии мечты.
Узнать больше
Источник: tproger.ru