Учебник js, cards 61-120 Flashcards
https://learn.javascript.ru/
Что вернет -1 / 0 ?
alert( -1 / 0 ); // -Infinity
Что будет при делении 0/0 ?
alert( 0 / 0 ); // NaN
Какой будет результат при if (NaN == NaN) alert( “==” ); if (NaN === NaN) alert( “===” );
никакой: if (NaN == NaN) alert( “==” ); // Ни один вызов if (NaN === NaN) alert( “===” ); // не сработает
Какие функции есть для округления?
Math.floor - Округляет вниз Math.ceil - Округляет вверх Math.round - Округляет до ближайшего целого alert( Math.floor(3.1) ); // 3 alert( Math.ceil(3.1) ); // 4 alert( Math.round(3.1) ); // 3 обрезание дроби: alert( ~~12.3 ); // 12 Существует также специальный метод num.toFixed(precision), который округляет число num до точности precision и возвращает результат в виде строки:
Чему равно
alert( 0.1.toFixed(20) );
alert( 0.1.toFixed(20) ); // 0.10000000000000000555
Как возвести число в степень?
Math.pow(x, exp)
Какие есть функции для максимума, минимума?
Math.max(a, b, c…) - возвращает наибольший из списка аргументов
Math.min(a, b, c…) - возвращает наименьший из списка аргументов
Функция для рэндомного числа?
Math.random()
Как отформатировать число с разбиением по тысячам?
alert( number.toLocaleString() ); // 123 456 789
Что не так в коде калькулятора суммы?
var a = prompt(“Введите первое число”, “”);
var b = prompt(“Введите второе число”, “”);
alert( a + b );
Будут складываться строки вместо чисел
Почему 6.35.toFixed(1) округляется до 6.3?
Из-за потери точности.
Во внутреннем двоичном представлении 6.35 является бесконечной двоичной дробью. Хранится она с потерей точности… А впрочем, посмотрим сами:
alert( 6.35.toFixed(20) ); // 6.34999999999999964473
Интерпретатор видит число как 6.34…, поэтому и округляет вниз.
Что в коде для интернет-магазина не так?
alert( 0.1 + 0.2 + ‘$’ );
Код выводит 0.30000000000000004$
Какая беда с таким циклом?
for(var i = 0; i != 10; i + 0.2) { ... }
Цикл бесконечный =)
Классическая ошибка в сравнении дробей
Какие типы в js передаются по ссылке, а какие - по значению?
Строки, числа, булевы значения, null/undefined передаются по значению, объекты - по ссылке
Какая тонкость в отладке такого кода в консоли?

При «раскрытии» свойств объекта в консоли – браузер всегда выводит их текущие (на момент раскрытия) значения, какбудто объект не меняется
Так происходит именно потому, что вывод не делает «копию» текущего содержимого, а сохраняет лишь ссылку на объект. Запомните эту особенность консоли, в будущем, при отладке скриптов у вас не раз возникнет подобная ситуация.

Как создать массив?
var fruits = [“Яблоко”, “Апельсин”, “Слива”];
Перечислить функции работы с массивом как с очередью
pop - удаляет последний элемент из массива и возвращает его
push - добавляет элемент в конец массива:
shift - удаляет из массива первый элемент и возвращает его
unshift - добавляет элемент в начало массива
Методы push и unshift могут добавлять сразу по несколько элементов
Методы push/pop выполняются быстро, а shift/unshift – медленно.
Можно ли использовать for .. in для перебора массива?
Не используйте for..in для массивов, цикл for(var i=0; i<arr.length...></arr.length...>
<p>Так как массив является объектом, то возможен и вариант for..in:</p>
<p>var arr = ["Яблоко", "Апельсин", "Груша"];<br></br>for (var key in arr) { alert( arr[key] ); // Яблоко, Апельсин, Груша }</p>
<p>Недостатки этого способа:</p>
<p>Цикл for..in выведет все свойства объекта, а не только цифровые.</p>
<p>В браузере, при работе с объектами страницы, встречаются коллекции элементов, которые по виду как массивы, но имеют дополнительные нецифровые свойства. При переборе таких «похожих на массив» коллекций через for..in эти свойства будут выведены, а они как раз не нужны.</p>
<p>Бывают и библиотеки, которые предоставляют такие коллекции. Классический for надёжно выведет только цифровые свойства, что обычно и требуется.</p>
<p>Цикл for (var i=0; i<arr.length>
<p> </p>
</arr.length></p>
</arr.length...>
Если в массиве только один элемент, в каких случаях length вернет большее значение?
var arr = [];
arr[1000] = true;
alert(arr.length); // 1001
Длина length – не количество элементов массива, а последний индекс + 1.
Что будет если изменить length в массиве?
Массив будет обрезан
var arr = [1, 2, 3, 4, 5];
arr.length = 2; // укоротить до 2 элементов
alert( arr ); // [1, 2]
arr.length = 5; // вернуть length обратно, как было
alert( arr[3] ); // undefined: значения не вернулись
Самый простой способ очистить массив – это arr.length=0.
Чем отличаются:
var arr1 = new Array(2);
var arr2 = [2];
если в new Array передать один аргумент, то это размер массива,
если два - то это два элемента.
var arr2 = [2]; - всегда один элемент, двойка
Получится ли массив если написать так: {length: 2}?
Почти да, с двумя undefined элементами
alert({length: 2}); // Object
alert([2, 3]); // 2,3
Как создать матрицу в js?

В каких случаях движок не будет оптимизировать хранение массива?
Если ставить массиву произвольные свойства, такие как arr.test = 5. То есть если работать как с объектом, а не с массивом
Если не заполнять массив непрерывно и по возрастающей. Как только браузер встречает необычное поведение массива, например устанавливается значение arr[0], а потом сразу arr[1000], то он начинает работать с ним, как с обычным объектом. Как правило, это влечёт преобразование его в хэш-таблицу.
Какой формат вызова forEach?
Метод «arr.forEach(callback[, thisArg])» используется для перебора массива.
Он для каждого элемента массива вызывает функцию callback.
Этой функции он передаёт три параметра callback(item, i, arr):
item – очередной элемент массива.
i – его номер.
arr – массив, который перебирается.

Как предикатом выбрать подмножество из массива?
filter
Метод «arr.filter(callback[, thisArg])» используется для фильтрации массива через функцию.
Он создаёт новый массив, в который войдут только те элементы arr, для которых вызов callback(item, i, arr) возвратит true.

Какой есть аналог с# arr.Select(x => {})
map
Метод «arr.map(callback[, thisArg])» используется для трансформации массива.
Он создаёт новый массив, который будет состоять из результатов вызова callback(item, i, arr) для каждого элемента arr.

Какие есть аналоги для Any()/All() из С#?
every/some
Эти методы используются для проверки массива.
Метод «arr.every(callback[, thisArg])» возвращает true, если вызов callback вернёт true для каждогоэлемента arr.
Метод «arr.some(callback[, thisArg])» возвращает true, если вызов callback вернёт true для какого-нибудь элемента arr.

Аналог aggregate для js?
reduce/reduceRight
Метод «arr.reduce(callback[, initialValue])» используется для последовательной обработки каждого элемента массива с сохранением промежуточного результата.
Это один из самых сложных методов для работы с массивами. Но его стоит освоить, потому что временами с его помощью можно в несколько строк решить задачу, которая иначе потребовала бы в разы больше места и времени.
Метод reduce используется для вычисления на основе массива какого-либо единого значения, иначе говорят «для свёртки массива». Чуть далее мы разберём пример для вычисления суммы.
Он применяет функцию callback по очереди к каждому элементу массива слева направо, сохраняя при этом промежуточный результат.
Аргументы функции callback(previousValue, currentItem, index, arr):
previousValue – последний результат вызова функции, он же «промежуточный результат».
currentItem – текущий элемент массива, элементы перебираются по очереди слева-направо.
index – номер текущего элемента.
arr – обрабатываемый массив.

Какие правила перегрузки функций в js?

Никаких, в js нет перегрузки функций, второе объявление перезапишет первое
Как узнать, с какими параметрами вызвана функция f()?
Через псевдо-массив (не поддерживает методов Array) arguments.
Изменять значения в этом массиве не рекомендуется, в strict mode изменения останутся только в массиве.
Какие особенности есть у массива arguments?
Главная - что arguments - не массив, у него есть только length и доступ по индексу, больше ничего
Что такое arguments.callee?
Depricated. В старом стандарте JavaScript объект arguments не только хранил список аргументов, но и содержал в свойстве arguments.callee ссылку на функцию, которая выполняется в данный момент.
Что такое arguments.callee.caller?
Depricated. Устаревшее свойство arguments.callee.caller хранит ссылку на функцию, которая вызвала данную.