Тестов штук, по 15 вопросов в каждом.
Общий тест JS №1
Вопрос
Ваш ответ:
Правильный ответ:
Ваш ответ
Объяснения по тесту 1:
Обращайте внимание стоит запятая или точка в дробном числе. Правильно именно точку писать.
Необходимо запомнить что JavaScript отбрасывает нули после точки, например, вот в таком примере 1.4900 + 1.0100000; ответ будет 2.5
х++; увеличивает значение переменной на единицу.
Эта операция аналогична:
х += 1;
или
х = х +1;
х++; называют инкремент.
х- -; называют декремент. Соответственно уменьшает значение переменой х на единицу.
Сравнение идет слева направо.
0 || 9 — Оператор сравнения «или» (||) в данном случае возвращает 9.
Потом сравнивается 9 && 3. Возвращается 3. Потому что оператор «и» (&&) смотрит два значения и возвращает последнее.
Далее получаем 3 || 7, где возвращается первое значение.
В итоге правильный ответ 3.
Оператор break прерывает выполнение текущего цикла, оператора множественного выбора switch или блочного выражения с меткой. Выполнение кода продолжается с конструкции, следующей за прерванной.
Один из примеров.
break в конструкции switch.
В примере оператор break прервёт выполнение switch сразу после выполнения кода в совпавшем case.
const food = «sushi»;
switch (food) {
case «pizza»:
console.log(«Pizza»);
break;
case «sushi»:
console.log(«Sushi»);
break;
default:
console.log(«Other»);
}
При суммировании JS приводит булевые значения true и false к 1 и 0.
Поэтому получается 1 + 0.
В итоге 1.
Неважно пустой массив или заполнен, если мы при присвоении значения перескакиваем через индексы, то пустые индексы до указанного в присвоении засчитываются в свойство length.
Например:
const arr = [5];
arr[2] = 6;
В таком случае arr.length будет равен 3.
В консоле браузера массив будет выглядеть так
(3) [5, empty, 6]
но надо понимать, что если вывести пропущенный индекс
сonsole.log(arr[1])
мы получим undefined
0 || «» || 9 || undefined || true || falsе
При первом сравнении 0 || «» получаем «» , далее сравнивается «» || 9 выходит 9. После 9 || undefined получаем снова 9. Далее 9 || true получаем 9.
И последнее 9 || false получаем в ответ 9.
Оператор сравнения «или» смотрит второе значение если первое ложно. Если первое правдиво, то возвращает сразу его.
Сравнение строк происходит посимвольно, при этом вместо традиционного алфавита применяется кодировка Unicode. Это влияет на то, что строчное и заглавное написание одной и той же буквы (например ф и Ф) не считается равными друг другу. Большей считается строчная буква ф, потому что в таблице кодировки её код больше.
Алгоритм такой:
1) Сначала сопоставляется начальные символы строк. Если они не равны друг другу, большей считается строка, первый символ которой больше и процесс завершается.
2) Если первые символы одинаковы, производится переход к сравнению вторых символов. Если они не равны, большей будет строка, второй символ которой больше.
3) Процесс продолжается пока одна из строк не закончится (большей оказывается та из них, которая содержит больше символов) или пока символы на n-ной позиции не окажутся различными между собой (в этом случае большей будет та строка, где соответствующий символ больше).
Если сравнивать ‘а’ и ‘б’, то буква ‘б’ будет больше буквы ‘a’.
ECMAScript — это встраиваемый расширяемый не имеющий средств ввода-вывода язык программирования, используемый в качестве основы для построения других скриптовых языков.
Расширения языка: JavaScript, JScript и ActionScript.
Необходимо запомнить что ECMAScript — это спецификация.
++ перед переменной называется «префиксный инкремент». Этот оператор увеличивает переменную на единицу.
Например:
let x = 1;
++x;
Мы получаем в переменной 2.
Существует «постфиксный инкремент», пишется после переменной, например:
x++;
постфиксный инкремент — возвращает значение, а потом увеличивает.
префиксный инкремент — сразу возводит и потом возвращает.
К примеру это важно при выводе в консоль.
let i = 1;
console.log(i++); // Выведет 1
let f = 1;
console.log(++f); // Выведет 2
Операция присвоения переменной происходит справа налево.
let y = 2;
let x = y = 5;
Поэтому в примере выше «y» присваивается значение 5.
Далее «x» присваивается значение переменной «y».
Получаем в итоге «x» равен 5.
Правильным вариантом является написание:
try { … } catch { … }
Также существуют ещё 2 варианта:
try {…} finally {…}
и
try {…} catch {…} finally {…}
alert выведет слово World, так как переменной str было присвоено именно это значение.
Код в вопросе выведет последний подходящий вариант, так как под 1 подпадает два свойства объекта.
‘1’: 0,
и
1: 1,
Поэтому правильным ответом будет 1.
У каждой функции по умолчанию уже есть свойство «prototype».
По умолчанию «prototype» – объект с единственным свойством constructor, которое ссылается на функцию-конструктор.
function F() {}
/* прототип по умолчанию
F.prototype = { constructor: F };
*/
Общий тест JS №2
Вопрос
Ваш ответ:
Правильный ответ:
Ваш ответ
Объяснения по тесту 2:
Цикл for … in перебирает ключи, т.е. выдает название свойств, а не их значение.
Если название свойств идет ввиде цифр от 0 нуля и выше, то будет выводится в порядке увеличения. В примере в самом вопросе теста выходит 0 потом 1.
Но, например, с числами с минусом, такое правило не действует.
for(let key in {«7»:3, «-5»:2}) {
alert(key);
}
Будет ответ 7 потом -5.
С строками в названии свойств цикл будет выводить по порядку указанные в самом объекте.
for(let key in {«b»:3, «a»:2}) {
alert(key);
}
b потом a.
Оператор === сравнивает и по значению, и по типу данных.
Поэтому, например, 1 === «1» будет выдавать в консоле браузера false, т.к. первая единица это числовой тип данных, а «1» — это строковый тип данных.
let arr = [1, 2, 3];
arr.numb = 7;
Если вывести данный массив в консоль, то получим
[1, 2, 3, numb: 7]
Поэтому значение numb возможно получить обратившись как arr.numb
При выводе через циклы такое свойство не будет выводится, только значения 1,2,3 или соответствующие им ключи 0,1,2. Свойство length останется как и было 3.
Аргументы, передаваемые функции при её вызове, присваиваются параметрам функции в том порядке, в каком они указаны: первый аргумент присваивается первому параметру, второй аргумент – второму параметру и т. д.
Важной особенностью функций в JavaScript является то, что функция может вызываться с произвольным количеством аргументов вне зависимости от того, сколько параметров было указано при её объявлении:
— Если при вызове функции ей передаётся больше аргументов, чем задано параметров, то «лишние» аргументы просто игнорируются и не присваиваются ни одному из параметров данной функции.
— Если количество аргументов, передаваемых функции при её вызове меньше, чем было указано параметров при объявлении, то параметрам без соответствующих аргументов присваивается значение undefined. Подобное поведение JavaScript удобно использовать, если некоторые аргументы функции необязательны и могут опускаться.
После пустого массива все числа не слаживаются, а применяется конкатенация. Например:
1 + 4 + [] + 5 + 4;
Получаем ‘554’, потому что 1 + 4 выходит 5, но после [] происходит конкатенация — к первой высчитанной 5 прикрепляется пять и четыре как строки.
В вопросе из теста получается 54, т.к. эти цифры складываются как строки.
Infinity является свойством глобального объекта, то есть, это переменная в глобальной области видимости.
Значение Infinity (положительная бесконечность) больше любого другого числа, включая саму положительную бесконечность. Это значение ведёт себя как математическая бесконечность; например, любое положительное число, умноженное на Infinity даёт Infinity, а любое число, делённое на Infinity даёт 0.
Функция setTimeout выполняется с задержкой и все создаваемые таймеры используют одну и ту же переменную i.
Поэтому после выполнения цикла происходит вывод одного и того значения.
+ не только складывает числа, но и выполняет присоединение к друг другу строк. Такое сложение называется конкатенация.
Оператор ** возводит в степень.
Например:
3 ** 2 // Ответ 9
3 ** 3 // Получим 27
Буква ‘ё’ будет больше буквы ‘я’. Потому что у ‘ё’ больше числовое значение Unicode символа, равное 1105.
‘я’ имеет номер 1103.
Можно использовать метод:
str.charCodeAt(index);
Возвращает число, указывающее значение Unicode, индекс которого был передан методу в качестве аргумента. Он возвращает NaN
, если данный индекс не находится между 0 и str.length — 1 строки.
Пример:
‘Б’.charCodeAt(0); // Для буквы «Б» покажет число 1045
Языке JavaScript рассматривает переменные с разным регистром как не одинаковые. Поэтому b и B или Val и val будут разными переменными.
Данный код
alert( «123»[2] );
указывает на 3, потому что мы можем получить доступ к символам в строке, используя ее индекс. Отсчёт индексов начинается с 0 и увеличивается на единицу. Таким образом, мы можем получить доступ к каждому из символов строки.
Код в вопросе теста выведет 10.
obj[«0»] и obj[0] выбирают последнее свойство в названии с нулем, потому что при попытке вывести значение, «0» и 0 в названии свойств воспринимаются как одинаковые.
Если поменять местами «0»: 3 и 0: 5, то будут слаживатся две 3. В итоге выведется 6.
После пустого массива идет конкатенация, поэтому к false присоединяется 1 (из-за того что перед true стоит «+» происходит приведение булевого значения к цифре).
В итоге из-за сложения строк получаем false1.
b = new Array(8) создаёт пустой массив. При просмотре в консоле он будет выглядеть так
[empty × 8]
Поэтому при указании b[0] мы получаем undefined.
Следовательно при сложении с a[1], равным двойке мы получаем:
2 + undefined
Что в свою очередь будет равняться NaN.
Общий тест JS №3
Вопрос
Ваш ответ:
Правильный ответ:
Ваш ответ
Объяснения по тесту 3:
Оператор var объявляет переменную, инициализируя её, при необходимости.
Переменная var, созданная вне функции, действует как глобальная переменная — она доступна из любой части скрипта.
Если создать переменную с помощью var внутри функции, то она будет локальной, то есть доступной только в функции.
Особенности:
— Отсутствие блочной области видимости.
Var-переменная, созданная в блоке if‑else или цикле, доступна за пределами своего блока.
— Имеет функциональную область видимости.
— Повторное объявление.
Переменные var можно создавать повторно, и компилятор не будет ругаться. Это запутывает код и практически всегда приводит к ошибкам.
— «Поднятие» переменной, или hoisting.
Все переменные var считаются объявленными перед запуском скрипта. При этом они остаются undefined до тех пор, пока не выполнится код инициализации.
Массивы всегда сравниваются по ссылке, а не по содержанию.
В случае в вопросе это разные массивы, поэтому они не равны друг другу.
Чтобы было равенство — переменные должны ссылаться на одну ячейку памяти.
‘Yes’ не выводится потому что в ‘a’ подставляется false. И при false === ‘0’ мы получаем что булевое значение сравнивается с текстовым типом данных.
При ‘==’ происходит приведение типов, благодаря чему false == ‘0’ является правдой.
Для лучшего понимания можно воспользоваться функцией Boolean(), которая определяет, является ли выражение (или переменная) истиной.
Шпаргалка по «инстинным» и «ложным» значениям в JavaScript:
Boolean(false); // false
Boolean(undefined); // false
Boolean(null); // false
Boolean(»); // false
Boolean(NaN); // false
Boolean(0); // false
Boolean(-0); // false
Boolean(0n); // false
Boolean(true); // true
Boolean(‘hi’); // true
Boolean(1); // true
Boolean([]); // true
Boolean([0]); // true
Boolean([1]); // true
Boolean({}); // true
Boolean({ a: 1 }); // true
Цикл выполнится 5 раз, потому что сразу выводится 0, а после уже numb увеличивается на 2.
Выходит получаем 0, 2, 4, 6, 8.
10 не меньше 10 — цикл заканчивается.
Будет NaN. Так как происходит приведение типов, от текста отнимается единица — получаем некорректное числовое значение.
Другие примеры:
console.log( `And` — `bbb`); // NaN
console.log( `5` — `1`); // 4
Объект Math содержит набор методов, который используется для округления чисел:
— round() — округление по обычным правилам;
— floor() — округление вниз;
— ceil() — округление вверх;
— trunc() — отбрасывание дробной части, не обращая внимания на знак аргумента.
Надо запомнить что Math необходимо писать с большой буквы, в других случаях будет ошибка.
Другие примеры:
Math.floor(7.999999); // возвращаемое значение 7
Math.floor(-5); // возвращаемое значение -5
Math.floor(-4.999999); // возвращаемое значение -5
Функция outputStr из вопроса возвратит ‘С’, потому что значение ‘A’ переменной numb заменяется на значение ‘С’.
А numb и Numb это разные переменные.
В этой части кода new Array(3) создается пустой массив. При выводе в консоле он выглядит так:
(3) [empty × 3]
Далее join(‘3’) — создаёт строку из элементов массива a, вставляя 3 между этими элементами.
Так как элементов 3, то получаем строку 33.
else не является обязательным элементом.
Если необходимо управляющую конструкцию можно написать так:
if (условие) {
console.log(‘выполнюсь, если условие истинное’)
}
В JavaScript есть два ограничения, касающиеся имён переменных:
1) Имя переменной должно содержать только буквы, цифры или символы $ и _.
2) Первый символ не должен быть цифрой.
В противном случае код будет выдавать ошибку.
Оператор typeof возвращает тип аргумента.
В вопросе typeof вернет объект, потому что строка «I`m a String!» находится в массиве.
Правильный ответ Math.floor((Math.random() * 10) + 1);
Функция Math.random() возвращает случайные числа.
Диапазон возвращаемых чисел представлен значениями от 0 (включая 0, то есть, она может вернуть 0) до 1 (не включая 1, то есть — единицу она вернуть не может).
Полученное значение в вопросе умножается на 10, чтобы получить число от 0 до 10.
Прибавляется 1 чтобы можно было получить и 10.
Но так как рандом может вернуть дробное число (к примеру 10.7) используется Math.floor, которая уменьшает число в меньшую сторону.
while(true) do{} — не существует такого цикла.
С while есть:
do{} while(true)
и
while(true) {}
Функция prompt принимает два аргумента:
result = prompt(title, default);
Она выводит модальное окно с заголовком title, полем для ввода текста, заполненным строкой по умолчанию default и кнопками OK/CANCEL.
Пользователь должен либо что-то ввести и нажать OK, либо отменить ввод кликом на CANCEL или нажатием Esc на клавиатуре.
new Number() создает объект Number.
В вопросе происходит строгое сравнивание, без приведения типов.
Сравнивается объект и числовой тип данных. Поэтому получаем ответ false.
Общий тест JS №4
Вопрос
Ваш ответ:
Правильный ответ:
Ваш ответ
Объяснения по тесту 4:
BigInt – это специальный числовой тип, который предоставляет возможность работать с целыми числами произвольной длины.
Чтобы создать значение типа BigInt, необходимо добавить n в конец числового литерала или вызвать функцию BigInt, которая создаст число типа BigInt из переданного аргумента. Аргументом может быть число, строка и др.
Примеры:
const bigint = 12345690123456790n;
const sameBigint =BigInt(1234567890123890);
const bigintFromNumber = BigInt(10); // то же самое, что и 10n
Код не выполнится, потому что значение переменной time (5) не больше и не меньше 5.
А также в конструкции if нет else, вместо этого используется else if.
В итоге мы получаем при проверке 2 раза false, что не дает выполнится коду.
Будет ошибка, т.к. объявление переменной происходит внутри конструкции if.
Правильным вариантом будет написать let result; перед конструкцией if.
‘start’ не будет выведен, т.к. после return не выполняется код.
Function Declaration – функция, объявленная в основном потоке кода.
Function Expression – объявление функции в контексте какого-либо выражения, например присваивания.
Примеры:
1. Объявление функции в коде (Function Declaration)
function hello(name) {
alert(`Привет ${name}`)
}
2. Создание функционального выражения (Function Expression)
const hello = function(name) {
alert(`Привет ${name}`)
}
Будет ошибка, так как имя переменной должно содержать только буквы, цифры или символы $, _, а также 1-ый символ не должен быть цифрой.
Метод setTimeout — это встроенная функция JavaScript, устанавливающая таймер обратного отсчета (в миллисекундах) для выполнения функции обратного вызова по завершении заданного времени.
В коде написанном в вопросе будут выведены цифры от 0 до 9. При указании let при объявлении переменной i цикл будет отрабатывать как обычно, только если с задержкой, указанной в setTimeout.
Глобальная функция parseInt() принимает аргументом строку и основание системы счисления в диапазоне от 2 до 36. Возвращает число, полученное из разобранной строки или NaN, если основание не в указанном диапазоне, либо первый символ не удалось преобразовать в число.
В примере из вопроса после parseInt(`08`, 8) получаем 0, потому что используется восмеричная система.
parseInt(`05`, 8) выходит 5.
0 + 5, в итоге 5.
Метод join() позволяет преобразовать и объединить все элементы массива в одно строковое значение. По умолчанию, элементы массива будут разделены запятой, это поведение можно изменить передав в качестве параметра метода значение, которое будет использовано в качестве разделителя.
В качестве разделителя было передан символ «:». Получаем ‘1:2:3’.
Оператор != (не равно) возвращает true в том случае, если операнды не равны. Он аналогичен оператору равенства, перед сравнением приводит операнды к одному типу. В случае если оба операнда являются объектами, JavaScript сравнивает внутренние ссылки, которые будут не равны в том случае, если относятся к разным объектам в памяти.
Поэтому правильным ответом будет if (i != 5).
При смене порядка сложения произошло разное округление.
a + (b + c) — получаем 0.6
(a + b) + c — получаем 0.6000000000000001
В итоге получаем false.
Необходимо учитывать это при арифметических операциях с дробными числами.
Если рассматривать пример по частям получаем:
(a == b) // false
(a == !b) // true
(!a == b) // true
(!a == !b) // true
И с применением конкатенации выводится false true true true.
Для понимания примера можно воспользоваться функцией Boolean() (которая определяет, является ли выражение (или переменная) истиной).
Пример:
Boolean({}); // true
В вопросе в конструкции if получаем true, т.к. пустой массив при проверке существует (является правдой), благодаря этому и выводится Hello.
0xff представляет собой шестнадцатиричное представление числа ff, а 0x является префиксом, указывающим на то, что число записано в шестнадцатиричной форме. В десятичном представлении число 0xff будет равно 255, а в двоичном – 11111111.
В примере выходит 255 — 1. Итого 254.
str.slice(2,8) // lloWor — функция вырезает от второго символа до 8 (не включая)
str.substr(2,8) // lloWorld — функция вырезает от второго символа и сколько указано во втором аргументе, в нашем случае 8 символов
str.substring(2,8) // lloWor — функция вырезает от второго символа до 8 (не включая)
Общий тест JS №5
Вопрос
Ваш ответ:
Правильный ответ:
Ваш ответ
Объяснения по тесту 5:
Логический оператор НЕ (!) (логическое отрицание) меняет логическое значение операнда с истины в ложь и наоборот. Обычно он используется с булевыми (логическими) значениями. При использовании с любыми другими значениями, если операнд может быть преобразован в true, то вернёт false в противном случае он возвращается true.
В вопросе в функцию передается 1, которая в if в первом return преобразуется сразу в false (при первом левом восклицательном знаке от param), потом в true (при втором восклицательном знаке от param). Далее «+» меняет true на 1, потом происходит преобразование булевого значения в числовое.
Оператор typeof позволяет определить тип параметра (число, строка, объект). Оператор возвращает строку, содержащую тип (‘number’, ‘string’, ‘object’).
В вопросе, в данном случае, код идет справа на лево.
Выходит typeof 1 возвращает тип данных ‘number’.
Далее мы получаем typeof ‘number’, а так как ‘number’ — это текст, т.е. строковый тип данных, оператор typeof возвращает ‘string’.
Правильный ответ setInterval().
Метод setInterval() позволяет регулярно запускать функцию через указанный промежуток времени.
Пример:
const intervalId = setInterval(function() {
console.log(‘Я выполняюсь каждую секунду’)
}, 1000)
Свойство length возвращает количество элементов в массиве. Если элементов нет, то свойство возвращает 0.
В вопросе последним элементом является 99 индекс, поэтому в свойство length будет записано 100 (нулевой индекс учитывается).
В консоле браузера массив myArr выглядит:
(100) [empty, 0, empty × 4, 7, empty × 92, 1]
Важно понимать что пропущенные пустые значения подсчитываются в length.
Правильный ответ split().
Метод split() разбивает (делит) строку на две или более подстроки в зависимости от разделителя. Разделитель может быть одним символом, другой строкой или регулярным выражением.
После разделения строки на несколько подстрок метод split() помещает их в массив и возвращает его. Он не вносит никаких изменений в исходную строку.
Пример:
string1 = «H e l l o»;
string2 = string1.split(‘ ‘); // В string2 будет записан массив [‘H’, ‘e’, ‘l’, ‘l’, ‘o’]
Правильным ответом будет true, потому что к свойствам объекта можно обращаться через точку и через квадратные скобки.
В примере таким образом мы получаем в console.log что «value» == «value».
Пример в вопросе по частям:
Array(8) — мы получаем массив с 8 пустыми элементами ( [empty × 8] )
join(«js»-1) — метод join превращает массив в строку, соединяя элементы с помощью NaN (от строки отнимаем число («js»-1) получаем некорректное числовое значение).
Далее происходит конкатенация, к NaNNaNNaNNaNNaNNaNNaN присоединяется string.
y — это параметр по умолчанию. Поэтому если мы при вызове функции не указываем второй аргумент, то в строке с return y будет равен 3. Получаем 7 + 3. Итого функция вернет 10.
Объекты сравниваются по ссылке, но не по наполнению. Исходя из этого в примере получаем false (a не равно b), т.к. это разные объекты.
Чтобы было равенство — переменные должны ссылаться на одну ячейку памяти.
Оператор запятая выполняет каждый из его операндов (слева направо) и возвращает значение последнего операнда.
Рассмотрим пример из вопроса.
let numbValue = (5, 10, 15);
Получаем что числовые значения заключены в круглые скобки, они вычисляются первыми. Это примерно эквивалентно:
5;
10;
let numbValue = 15;
Другие примеры:
let x = 1;
x = (x++, x);
console.log(x); // Выведет 2
x = (2, 3);
console.log(x); // Выведет 3
let numb = 2;
r = (++numb,++numb);
console.log(r); // Выведет 4
Правильный ответ link().
Метод link() создаёт HTML-элемент <a>, заставляющий строку отображаться в виде ссылки на другой URL.
Метод link() используется для создания кусочка HTML со ссылкой в гипертексте. Возвращённая строка затем может быть добавлена в документ при помощи метода document.write() или свойства element.innerHTML
Важно!
Устарело: Эта возможность была удалена из веб-стандартов. Хотя некоторые браузеры по-прежнему могут поддерживать её, она находится в процессе удаления. Не используйте её ни в старых, ни в новых проектах. Страницы или веб-приложения, использующие её, могут в любой момент сломаться.
Правильный ответ let a = { ‘a’, ‘b’ };.
Потому что данный код создает именно объект, а не массив.
Метод bind() доступен у функций, и в его задачу входит связывание функции с каким-то контекстом. Результатом выполнения bind() будет новая функция, работающая как и исходная функция, но с привязанным к ней контекстом.
Подход с bind() был популярен до появления стрелочных функций, сейчас его используют нечасто. Стрелочные функции проще для понимания и используются повсеместно.
При выводе в консоль typeof(result) возвращает number (потому плюс перед переменной str приводит строку к числу).
Значение переменная str это 123. В итоге получаем number 123.
Чтобы метод Math.max высчитывал максимальное число для массива необходимо дополнительно использовать метод apply().
Метод apply() вызывает функцию с указанным значением this и аргументами, предоставленными в виде массива (либо массивоподобного объекта).
Синтаксис
function.apply(thisArg, [argsArray])
Параметры
thisArg
Опциональный параметр. Значение this, предоставляемое для вызова функции fun. Обратите внимание, что this может не быть реальным значением, видимым этим методом: если метод является функцией в нестрогом режиме (en-US), значения null и undefined будут заменены глобальным объектом, а примитивные значения будут упакованы в объекты.
argsArray
Опциональный параметр. Массивоподобный объект, определяющий аргументы, с которыми функция fun должна быть вызвана, либо null или undefined, если в функцию не надо передавать аргументы. Начиная с ECMAScript 5 эти аргументы могут быть обобщёнными массивоподобными объектами, а не только массивом. Смотрите ниже информацию по совместимости с браузерами.
Метод apply() позволяет вам использовать встроенные функции для некоторых задач, для которых в противном случае пришлось бы писать цикл по массиву значений.
В качестве примера используем Math.min() для нахождения минимального значения в массиве.
let numbers = [5, 6, 2, 3, 7];
let min = Math.min.apply(null, numbers); // Вывод 2
Это эквивалентно Math.max(numbers[0], …) или Math.max(5, 6, …).
Общий тест JS №6
Вопрос
Ваш ответ:
Правильный ответ:
Ваш ответ
Объяснения по тесту 6:
let a, b, c = [1, 2, 3, 4, 5]; можно представить как:
let a;
let b;
let c = [1, 2, 3, 4, 5];
В данном коде ничего не присваивается переменным a и b. Поэтому их значением является undefined.
Если во внутренней области видимости объявить переменную с тем же именем, что и во внешней, она перекроет переменную из внешней области видимости. Этот эффект называется shadowing (затенение).
Благодаря этому мы получаем при выводе ‘Мир’, а не ‘Привет’.
Объект HTMLCollection представляет собой список элементов HTML в виде массива.
К элементам коллекции можно получить доступ по индексу (начинается с 0).
Свойство length возвращает количество элементов в коллекции.
Пример:
let x = document.getElementsByTagName(«P»);
// Возвращает коллекция всех элементов P в документе
Важно!
HTMLCollection — это не массив!
HTMLCollection может выглядеть как массив, но это не так.
Вы можете перебирать HTMLCollection и ссылаться на его элементы с помощью индекса.
Но вы не можете использовать методы массива, такие как push(), pop() или join(), в HTMLCollection.
Метод match() выполняет поиск по строке с использованием регулярного выражения и возвращает массив, содержащий результаты поиска.
Ситаксис
str.match(regexp)
Параметры
regexp
Объект регулярного выражения. Если будет передан объект obj, не являющийся регулярным выражением, он будет неявно преобразован в объект RegExp через вызов конструктора new RegExp(obj).
Описание:
Если регулярное выражение не содержит флаг g, возвращаемый результат будет тем же самым, что и при вызове метода RegExp.exec(). Возвращаемый объект массива имеет дополнительное свойство input, которое содержит оригинальную строку. Кроме того, он имеет свойство index, которое представляет индекс (нумерация с нуля) сопоставления в строке.
Если регулярное выражение содержит флаг g, метод вернёт массив, содержащий все сопоставления. Если сопоставлений не было, метод вернёт значение null.
Пример:
const myText = «s7t89ring0»; // инициализируем переменную, содержащую строку
const pattern = /\d+/g // cоответствует всем вхождениям одной или более цифр
const arr = myText.match(pattern);
console.log( arr ); // Выведет [«7», «89», «0»]
Преобразование типов может быть явным и неявным. Когда разработчик выражает намерение сконвертировать значение одного типа в значение другого типа, записывая это соответствующим образом в коде, скажем, в виде Number(value), это называется явным приведением типов (или явным преобразованием типов).
Так как JavaScript — это язык со слабой типизацией, значения могут быть конвертированы между различными типами автоматически. Это называют неявным приведением типов. Обычно такое происходит, когда в выражениях используют значения различных типов, вроде 1 == null, null + true. Неявное преобразование типов может быть вызвано и контекстом выражения, вроде if (value) {…}, где value неявно приводится к логическому типу данных.
В JavaScript существует лишь 3 типа конвертации: в строку, в число или в логическое значение.
Чтобы конвертировать значение в эти типы, можно воспользоваться одноимёнными функциями:
String(20) // Приводит к строке.
Number(’20’) // Приводит к числу.
Boolean(20) // Приводит к логическому значению.
Метод addEventListener — это самый функциональный способ позволяющий добавить обработчик события к указанному элементу и запустить выполнение программы при совершении заданного действия. Получить информацию о сигналах браузера можно из Document (DOM), Element, Window и других объектов поддерживающих события.
addEventListener() является одних из 3 способом прослушивать события, наряду с добавление атрибута к тегам в HTML и обращения к свойствам объекта напрямую.
addEventListener() позволяет добавить несколько обработчиков на одно событие. Это происходит потому, что у объекта только одно свойство, например с именем onclick (клик) или mousemove (движение мыши) и если обратиться к одному из них напрямую несколько раз, второй обработчик перезапишет первый.
Функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата, называется функцией высшего порядка.
С функциями в JavaScript вы можете:
— Хранить их в качестве переменных;
— Использовать их в массивах;
— Назначать их в качестве свойств объекта (методов);
— Передавать их в качестве аргументов;
— Возвращать их из других функций.
Пример использования функции в качестве аргумента:
isEven = (num) => num % 2 === 0;
result = [1, 2, 3, 4].filter(isEven);
console.log(result); // [2, 4]
Функция isEven вызывается функцией filter для каждого числа и использует возвращаемое значение true или false, чтобы определить, следует оставить число или выбросить.
В примере переменная a становится глобальной переменной после выполнения функции first(). После чего функция alert() отрабатывает без ошибки, т.к. она видит эту переменную.
window — это глобальный объект, предоставляемый браузером. Через него происходит управление окнами (вкладками) в браузере. Он содержит функции для открытия вкладки, управление положением страницы и многим другим.
Кроме того, объект Window определяет методы, такие как alert(), который отображает диалог с сообщением, и setTimeout(), который регистрирует функцию для вызова через указанный промежуток времени.
Объект window задает глобальный контекст выполнения. window хранит внутри себя все остальные глобально доступные свойства и объекты. Каждый раз, когда мы вызываем глобальные функции, такие как alert() или console.log(), браузер ищет их в объекте window. То есть в действительности происходит вызов window.alert().
Метод Object.keys() возвращает массив, состоящий из имён свойств объекта (ключей).
Пример:
const colors = {
brown: ‘470’,
white: ‘103’,
red: ’50’,
}
const types = Object.keys(colors);
// вот как будет выглядеть массив types: [«brown», «white», «red»]
В JS поддерживаются следующие математические операторы:
Сложение +,
Вычитание -,
Умножение *,
Деление /,
Возведение в степень **,
Взятие остатка от деления %.
Взятие остатка %
Оператор взятия остатка %, несмотря на обозначение, никакого отношения к процентам не имеет.
Результат a % b – это остаток от целочисленного деления a на b.
Например:
alert( 7 % 2); // // 1, остаток от деления 7 на 2
alert( 10 % 2 ); // 0, остаток от деления 10 на 2
Метод push() добавляет элемент в конец массива.
Метод unshift() позволяет добавить один, или более элементов в начало массива.
В вопросе добавляется ‘cat’ в начало массива, потом ‘dog’, ‘rat’, ‘goat’ прибавляются в конец массива.
Поэтому получаем в итоге 6 элементов в массиве animal.
Правильный ответ <<
Данный оператор сдвигает первый операнд на указанное количество бит влево. Излишние биты, сдвинутые влево, отбрасываются. Справа число дополняется нулевыми битами.
Побитовые операторы работают с 32-разрядными целыми числами (при необходимости приводят к ним), на уровне их внутреннего двоичного представления.
Эти операторы не являются чем-то специфичным для JavaScript, они поддерживаются в большинстве языков программирования.
Поддерживаются следующие побитовые операторы:
AND(и) ( & )
OR(или) ( | )
XOR(побитовое исключающее или) ( ^ )
NOT(не) ( ~ )
LEFT SHIFT(левый сдвиг) ( << )
RIGHT SHIFT(правый сдвиг) ( >> )
ZERO-FILL RIGHT SHIFT(правый сдвиг с заполнением нулями) ( >>> )
Они используются редко, когда возникает необходимость оперировать с числами на очень низком (побитовом) уровне.
JavaScript метод indexOf() позволяет возвратить индекс искомого элемента в массиве при первом совпадении, или -1 если элемент не найден.
В вопросе мы получаем -1, потому что 3 нет в массиве.
Оператор instanceof позволяет проверить, принадлежит ли объект указанному классу, с учётом наследования.
Другими словами, object instanceof constructor проверяет, присутствует ли объект constructor.prototype в цепочке прототипов object.
Синтаксис:
obj instanceof Class
Оператор вернёт true, если obj принадлежит классу Class или наследующему от него.
В console.log переменная a прописана внутри объекта. Поэтому при выводе мы видим объект с свойством a.