Учебник js, cards 61-120 Flashcards

https://learn.javascript.ru/

1
Q

Что вернет -1 / 0 ?

A

alert( -1 / 0 ); // -Infinity

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что будет при делении 0/0 ?

A

alert( 0 / 0 ); // NaN

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Какой будет результат при if (NaN == NaN) alert( “==” ); if (NaN === NaN) alert( “===” );

A

никакой: if (NaN == NaN) alert( “==” ); // Ни один вызов if (NaN === NaN) alert( “===” ); // не сработает

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Какие функции есть для округления?

A

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 и возвращает результат в виде строки:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Чему равно

alert( 0.1.toFixed(20) );

A

alert( 0.1.toFixed(20) ); // 0.10000000000000000555

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Как возвести число в степень?

A

Math.pow(x, exp)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Какие есть функции для максимума, минимума?

A

Math.max(a, b, c…) - возвращает наибольший из списка аргументов

Math.min(a, b, c…) - возвращает наименьший из списка аргументов

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Функция для рэндомного числа?

A

Math.random()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Как отформатировать число с разбиением по тысячам?

A

alert( number.toLocaleString() ); // 123 456 789

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Что не так в коде калькулятора суммы?

var a = prompt(“Введите первое число”, “”);

var b = prompt(“Введите второе число”, “”);

alert( a + b );

A

Будут складываться строки вместо чисел

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Почему 6.35.toFixed(1) округляется до 6.3?

A

Из-за потери точности.

Во внутреннем двоичном представлении 6.35 является бесконечной двоичной дробью. Хранится она с потерей точности… А впрочем, посмотрим сами:

alert( 6.35.toFixed(20) ); // 6.34999999999999964473

Интерпретатор видит число как 6.34…, поэтому и округляет вниз.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что в коде для интернет-магазина не так?

alert( 0.1 + 0.2 + ‘$’ );

A

Код выводит 0.30000000000000004$

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Какая беда с таким циклом?

for(var i = 0; i != 10; i + 0.2)
{
...
}
A

Цикл бесконечный =)

Классическая ошибка в сравнении дробей

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Какие типы в js передаются по ссылке, а какие - по значению?

A

Строки, числа, булевы значения, null/undefined передаются по значению, объекты - по ссылке

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Какая тонкость в отладке такого кода в консоли?

A

При «раскрытии» свойств объекта в консоли – браузер всегда выводит их текущие (на момент раскрытия) значения, какбудто объект не меняется

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Как создать массив?

A

var fruits = [“Яблоко”, “Апельсин”, “Слива”];

17
Q

Перечислить функции работы с массивом как с очередью

A

pop - удаляет последний элемент из массива и возвращает его

push - добавляет элемент в конец массива:

shift - удаляет из массива первый элемент и возвращает его

unshift - добавляет элемент в начало массива

Методы push и unshift могут добавлять сразу по несколько элементов

Методы push/pop выполняются быстро, а shift/unshift – медленно.

18
Q

Можно ли использовать for .. in для перебора массива?

A

Не используйте 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...>

19
Q

Если в массиве только один элемент, в каких случаях length вернет большее значение?

A

var arr = [];

arr[1000] = true;

alert(arr.length); // 1001

Длина length – не количество элементов массива, а последний индекс + 1.

20
Q

Что будет если изменить length в массиве?

A

Массив будет обрезан

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.

21
Q

Чем отличаются:

var arr1 = new Array(2);

var arr2 = [2];

A

если в new Array передать один аргумент, то это размер массива,
если два - то это два элемента.

var arr2 = [2]; - всегда один элемент, двойка

22
Q

Получится ли массив если написать так: {length: 2}?

A

Почти да, с двумя undefined элементами

alert({length: 2}); // Object

alert([2, 3]); // 2,3

23
Q

Как создать матрицу в js?

A
24
Q

В каких случаях движок не будет оптимизировать хранение массива?

A

Если ставить массиву произвольные свойства, такие как arr.test = 5. То есть если работать как с объектом, а не с массивом

Если не заполнять массив непрерывно и по возрастающей. Как только браузер встречает необычное поведение массива, например устанавливается значение arr[0], а потом сразу arr[1000], то он начинает работать с ним, как с обычным объектом. Как правило, это влечёт преобразование его в хэш-таблицу.

25
Q

Какой формат вызова forEach?

A

Метод «arr.forEach(callback[, thisArg])» используется для перебора массива.

Он для каждого элемента массива вызывает функцию callback.

Этой функции он передаёт три параметра callback(item, i, arr):

item – очередной элемент массива.

i – его номер.

arr – массив, который перебирается.

26
Q

Как предикатом выбрать подмножество из массива?

A

filter

Метод «arr.filter(callback[, thisArg])» используется для фильтрации массива через функцию.

Он создаёт новый массив, в который войдут только те элементы arr, для которых вызов callback(item, i, arr) возвратит true.

27
Q

Какой есть аналог с# arr.Select(x => {})

A

map

Метод «arr.map(callback[, thisArg])» используется для трансформации массива.

Он создаёт новый массив, который будет состоять из результатов вызова callback(item, i, arr) для каждого элемента arr.

28
Q

Какие есть аналоги для Any()/All() из С#?

A

every/some

Эти методы используются для проверки массива.

Метод «arr.every(callback[, thisArg])» возвращает true, если вызов callback вернёт true для каждогоэлемента arr.

Метод «arr.some(callback[, thisArg])» возвращает true, если вызов callback вернёт true для какого-нибудь элемента arr.

29
Q

Аналог aggregate для js?

A

reduce/reduceRight

Метод «arr.reduce(callback[, initialValue])» используется для последовательной обработки каждого элемента массива с сохранением промежуточного результата.

Это один из самых сложных методов для работы с массивами. Но его стоит освоить, потому что временами с его помощью можно в несколько строк решить задачу, которая иначе потребовала бы в разы больше места и времени.

Метод reduce используется для вычисления на основе массива какого-либо единого значения, иначе говорят «для свёртки массива». Чуть далее мы разберём пример для вычисления суммы.

Он применяет функцию callback по очереди к каждому элементу массива слева направо, сохраняя при этом промежуточный результат.

Аргументы функции callback(previousValue, currentItem, index, arr):

previousValue – последний результат вызова функции, он же «промежуточный результат».

currentItem – текущий элемент массива, элементы перебираются по очереди слева-направо.

index – номер текущего элемента.

arr – обрабатываемый массив.

30
Q

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

A

Никаких, в js нет перегрузки функций, второе объявление перезапишет первое

31
Q

Как узнать, с какими параметрами вызвана функция f()?

A

Через псевдо-массив (не поддерживает методов Array) arguments.
Изменять значения в этом массиве не рекомендуется, в strict mode изменения останутся только в массиве.

32
Q

Какие особенности есть у массива arguments?

A

Главная - что arguments - не массив, у него есть только length и доступ по индексу, больше ничего

33
Q

Что такое arguments.callee?

A

Depricated. В старом стандарте JavaScript объект arguments не только хранил список аргументов, но и содержал в свойстве arguments.callee ссылку на функцию, которая выполняется в данный момент.

34
Q

Что такое arguments.callee.caller?

A

Depricated. Устаревшее свойство arguments.callee.caller хранит ссылку на функцию, которая вызвала данную.