Учебник js, cards 1..60 Flashcards

https://learn.javascript.ru

1
Q

Что умеет JavaScript?

A

1) Создавать новые HTML-теги, удалять существующие, менять стили элементов, прятать, показывать элементы и т.п. 2) Реагировать на действия посетителя, обрабатывать клики мыши, перемещения курсора, нажатия на клавиатуру и т.п. 3) Посылать запросы на сервер и загружать данные без перезагрузки страницы (эта технология называется “AJAX”). 4) Получать и устанавливать cookie, запрашивать данные, выводить сообщения… …и многое, многое другое!

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

Что НЕ умеет JavaScript?

A

1) JavaScript не может читать/записывать произвольные файлы на жесткий диск, копировать их или вызывать программы. Он не имеет прямого доступа к операционной системе. Современные браузеры могут работать с файлами, но эта возможность ограничена специально выделенной директорией – «песочницей». Возможности по доступу к устройствам также прорабатываются в современных стандартах и частично доступны в некоторых браузерах. 2) JavaScript, работающий в одной вкладке, не может общаться с другими вкладками и окнами, за исключением случая, когда он сам открыл это окно или несколько вкладок из одного источника (одинаковый домен, порт, протокол). Есть способы это обойти, и они раскрыты в учебнике, но они требуют специального кода на оба документа, которые находятся в разных вкладках или окнах. Без него, из соображений безопасности, залезть из одной вкладки в другую при помощи JavaScript нельзя. 3) Из JavaScript можно легко посылать запросы на сервер, с которого пришла страница. Запрос на другой домен тоже возможен, но менее удобен, т. к. и здесь есть ограничения безопасности.

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

Основные фишки HTML5?

A

1) Чтение/запись файлов на диск (в специальной «песочнице», то есть не любые). 2) Встроенная в браузер база данных, которая позволяет хранить данные на компьютере пользователя. 3) Многозадачность с одновременным использованием нескольких ядер процессора. 4) Проигрывание видео/аудио, без Flash. 5) 2D и 3D-рисование с аппаратной поддержкой, как в современных играх.

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

Какие основные справочники по стандарту?

A

1) “RegExp MDN” 2) “RegExp dottoro” 3) “RegExp site:javascript.ru” 4) “document.cookie site:w3.org” …А самые последние версии стандартов – на http://dev.w3.org и на http://whatwg.org/specs/. 5) “innerHeight quirksmode” 6) “caniuse geolocation”

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

Является ли null «ссылкой на нулевой адрес/объект»

A

Значение null не является «ссылкой на нулевой адрес/объект» или чем-то подобным. Это просто специальное значение. Оно присваивается, если мы хотим указать, что значение переменной неизвестно.

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

Что такое undefined?

A

Значение undefined означает «переменная не присвоена».

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

Какие способы вызвать диалоговое окно кроме alert есть в js?

A

«prompt(вопрос[, по_умолчанию])» Задать вопрос и возвратить введённую строку, либо null, если посетитель нажал «Отмена». «confirm(вопрос)» Задать вопрос и предложить кнопки «Ок», «Отмена». Возвращает, соответственно, true/false. «alert(сообщение)»

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

Чему равен a в следующих неравенствах? var a = xxx; alert( a > 0 ); // false alert( a >= 0 ); // true alert( a == 0 ); // false

A

alert( null > 0 ); // false, т.к. null преобразовано к 0 alert( null >= 0 ); // true, т.к. null преобразовано к 0 alert( null == 0 ); // false, в стандарте явно указано, что null равен лишь undefined

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

Сравнение строк, чему равно alert( ‘а’ > ‘Я’ )?

A

Сравнение строк – лексикографическое, символы сравниваются по своим unicode-кодам. Поэтому получается, что строчные буквы всегда больше, чем прописные: alert( ‘а’ > ‘Я’ ); // true

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

Чему равно alert( 1 && 2 && 3 )?

A

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

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

в конструкции switch какой тип сравнения используется в каждом case?

A

===

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

что такое break outer; внутри цикла?

A

Переход на внешний label. Синтаксис: «имя_метки:», ставится она только перед циклами и блоками, например: outer: for(;;) { … for(;;) { … break outer; } } Переход на метку возможен только изнутри цикла, и только на внешний блок по отношению к данному циклу. В произвольное место программы перейти нельзя.

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

Что вернет функция без return внутри? function f() { } alert( f() ); // ???

A

function f() { } alert( f() ); // undefined

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

Будет ли работать код: function f() { for(var i = 0; i != 1; i++) { if(i == 0) var result = -1; else result = 1; } return result; } alert(f());

A

Да, вернет -1; Переменные, объявленные через var внутри функции, видны везде внутри этой функции, блоки if, for и т.п. на видимость не влияют.

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

В чем отличия Function Declaration от Function Expression?

A

Функции, объявленные через Function Declaration, отличаются от Function Expression тем, что интерпретатор создаёт их при входе в область видимости (в начале выполнения скрипта), так что они работают до объявления.

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

Можно ли сделать рекурсию на Function Expression?

A

var factorial = function me(n) { return (n == 1) ? n : n * me(n - 1); } alert( factorial(5) ); // 120 alert( me ); // ошибка, нет такой переменной

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

что вернет alert( +”12test” );

A

NaN ошибка парсинга

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

как проверить результат в переменной n на NaN?

A

isNaN(n) или n !== n или !isFinite(n) // проверяет на NaN и на +/- Infinite

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

результаты операций: alert( +” -12” ); alert( +” \n34 \n” ); alert( +”” ); alert( +”1 2” );

A

alert( +” -12” ); // -12 alert( +” \n34 \n” ); // 34, перевод строки \n является пробельным символом alert( +”” ); // 0, пустая строка становится нулем alert( +”1 2” ); // NaN, пробел посередине числа - ошибка

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

alert( ‘12.34’ / “-2” );

A

// -6.17

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

для css что вернет alert(+”12px”)?

A

// NaN

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

как распарсить 12px чтобы не было ошибки?

A

alert( parseInt(‘12px’) ); // 12

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

alert( parseInt(‘12px’) ) alert( parseFloat(‘12.3.4’) ) alert( parseInt(‘a123’) );

A

alert( parseInt(‘12px’) ) // 12, ошибка на символе ‘p’ alert( parseFloat(‘12.3.4’) ) // 12.3, ошибка на второй точке alert( parseInt(‘a123’) ); // NaN

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

Смысл записи? var x = prompt(“Введите значение”, “-11.5”); if (isNaN(x))

A

var x = prompt(“Введите значение”, “-11.5”); if (isNaN(x)) { alert( “Строка преобразовалась в NaN. Не число” ); } else { alert( “Число” ); }

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

Какие подводные камни в проверке корректности ввода числа через if(!isNaN(str)) ?

A
  1. Пустая строка и строка из пробельных символов преобразуются к 0, поэтому считаются числами. 2. Если применить такую проверку не к строке, то могут быть сюрпризы, в частности isNaN посчитает числами значения false, true, null, так как они хотя и не числа, но преобразуются к ним. alert( isNaN(null) ); // false - не NaN, т.е. “число” alert( isNaN(“\n \n”) ); // false - не NaN, т.е. “число”
26
Q

Как проверить что в переменной цифровое значение?

A

function isNumeric(n) { return !isNaN(parseFloat(n)) && isFinite(n); }

27
Q

Что это? var x = a * b / c ^ 0;

A

var x = a * b / c ^ 0; // читается как “a * b / c и округлить” Битовые операторы делают любое число 32-битным целым, обрезая десятичную часть.

28
Q

Как получить длину строки?

A

alert( str.length );

29
Q

Как получить символ в строке?

A

alert( str.charAt(0) ); alert( str[0] ); Индексация с нулевой позиции

30
Q

Как создать переменную типа char?

A

Никак, в js есть только строки, и буквы - тоже строки

31
Q

Что вернут вызовы: alert( ““.charAt(0) ); alert( “” [0] ); ?

A

alert( ““.charAt(0) ); // пустая строка alert( “” [0] ); // undefined

32
Q

Как заменить символ в строке?

A

Никак, в js все строки read-only

33
Q

Функции для преобразования в верхний/нижний регистр?

A

Методы toLowerCase() и toUpperCase() меняют регистр строки на нижний/верхний

34
Q

Какой в js аналог contains?

A

Для поиска подстроки есть метод indexOf(подстрока[, начальная_позиция]). Также существует аналогичный метод lastIndexOf, который ищет не с начала, а с конца строки. проверка if ( ~str.indexOf(…) ) означает, что результат indexOf отличен от -1, т.е. совпадение есть. Вот так: var str = “Widget”; if (~str.indexOf(“get”)) { alert( ‘совпадение есть!’ ); }

35
Q

Как получить подстроку в js?

A

substring, substr, slice

36
Q

Что делает substring?

A

Метод substring(start, end) возвращает подстроку с позиции start до, но не включая end. var str = “stringify”; alert(str.substring(0,1)); // “s”, символы с позиции 0 по 1 не включая 1. Если аргумент end отсутствует, то идет до конца строки Отличия от slice: substring(start, end) Отрицательные аргументы интерпретируются как равные нулю. Слишком большие значения усекаются до длины строки: alert( “testme”.substring(-2) ); // “testme”, -2 становится 0 Кроме того, если start > end, то аргументы меняются местами, т.е. возвращается участок строки между start и end:

37
Q

Что делает substr?

A

substr(start [, length]) Первый аргумент имеет такой же смысл, как и в substring, а второй содержит не конечную позицию, а количество символов. Если второго аргумента нет – подразумевается «до конца строки».

38
Q

Что делает со строкой slice?

A

slice(start [, end]) Возвращает часть строки от позиции start до, но не включая, позиции end. Смысл параметров – такой же как в substring. Отличия от substring: Отрицательные значения отсчитываются от конца строки: alert( “testme”.slice(-2) ); // “me”, от 2 позиции с конца alert( “testme”.slice(1, -1) ); // “estm”, от 1 позиции до первой с конца. Это гораздо более удобно, чем странная логика substring. Отрицательное значение первого параметра поддерживается в substr во всех браузерах, кроме IE8-. Если выбирать из этих трёх методов один, для использования в большинстве ситуаций – то это будет slice: он и отрицательные аргументы поддерживает и работает наиболее очевидно.

39
Q

Какие кодировки использует js для хранения строк?

A

Все строки имеют внутреннюю кодировку Юникод. Неважно, на каком языке написана страница, находится ли она в windows-1251 или utf-8. Внутри JavaScript-интерпретатора все строки приводятся к единому «юникодному» виду. Каждому символу соответствует свой код. Есть метод для получения символа по его коду: String.fromCharCode(code) Возвращает символ по коду code: alert( String.fromCharCode(1072) ); // ‘а’

40
Q

Что делает charCodeAt?

A

Возвращает код символа на позиции pos. Отсчет позиции начинается с нуля.

41
Q

Какие проблемы с Ё?

A

маленькая буква ё имеет код, больший чем я, поэтому ‘ё’(код 1105) > ‘я’(код 1103). Кстати, большая буква Ё располагается в Unicode до А, поэтому ‘Ё’(код 1025) < ‘А’(код 1040). Удивительно: есть буква меньше чем А :)

42
Q

Что выведет alert( “2” > “14” )?

A

True. Числа в виде строк сравниваются как строки alert( “2” > “14” ); // true, так как это строки, и для первых символов верно “2” > “1” Если хотя бы один аргумент – не строка, то другой будет преобразован к числу: alert( 2 > “14” ); // false

43
Q

Какая есть функция сравнения с учетом языковых особенностей?

A

Все современные браузеры, кроме IE10- (для которых нужно подключить библиотеку Intl.JS) поддерживают стандарт ECMA 402, поддерживающий сравнение строк на разных языках, с учётом их правил. Способ использования: var str = “Ёлки”; alert( str.localeCompare(“Яблони”) ); // -1 Метод str1.localeCompare(str2) возвращает -1, если str1 < str2, 1, если str1 > str2 и 0, если они равны.

44
Q

Какой способ сравнить в insensitive case?

A

new Intl.Collator(undefined, {sensitivity: “accent”}).compare(“ёжик”, “ЁЖИК”) Все современные браузеры, кроме IE10- (но есть библиотеки и для него) поддерживают стандарт ECMA 402, предназначенный решить проблемы локализации навсегда с помощью Intl.Collator - умеет правильно сравнивать и сортировать строки. Intl.DateTimeFormat - умеет форматировать дату и время в соответствии с нужным языком. Intl.NumberFormat - умеет форматировать числа в соответствии с нужным языком.

45
Q

Как создать объект в js?

A

Создание объектов Пустой объект может быть создан одним из двух синтаксисов: o = new Object(); // (1) o = {}; // пустые фигурные скобки (2) Обычно все пользуются синтаксисом (2), т.к. он короче.

46
Q

Как объявить свойство в объекте js?

A

person.name = ‘Вася’; person.age = 25; // запишем ещё одно свойство: с именем ‘age’ и значением 25

47
Q

Можно ли у объекта удалить свойство?

A

да delete person.age;

48
Q

Как проверить, есть ли свойство в js-объекте?

A

if (“name” in person) { alert( “Свойство name существует!” ); } Впрочем, чаще используется другой способ – сравнение значения с undefined. в JavaScript можно обратиться к любому свойству объекта, даже если его нет, ошибки не будет, но вернется специальное значение undefined: var person = {}; alert( person.lalala ); // undefined, нет свойства с ключом lalala

49
Q

В чем разница между проверками на существования свойства с помощью in и === undefined?

A

Свойство может существовать, но со значением undefined

50
Q

Какие способы получить свойство из объекта?

A

person.name и person[“name”]

51
Q

Сработает ли такая инициализация? var menuSetup = { width: 300, ‘height’: 200, “мама мыла раму”: true, size: { top: 90, middle: 60, bottom: 90 } };

A

да

52
Q

Какие особенности хранения массива объектов {name: “aaa”, age: 23} в движке?

A

Движок для экономии памяти хранит такие объекты как метаданные + данные: aaa 23 Петя 22 Маша 19

53
Q

Как перебрать свойства объекта в цикле?

A

for (ppp in obj) { /* … делать что-то с obj[ppp] … */ }

54
Q

Как получить количество свойств в объекте?

A

Object.keys(menu).length.

55
Q

Есть ли заданный порядок хранения свойств?

A

По стандарту – нет. Но некоторое соглашение об этом, всё же, есть. Соглашение говорит, что если имя свойства – нечисловая строка, то такие ключи всегда перебираются в том же порядке, в каком присваивались. Так получилось по историческим причинам и изменить это сложно: поломается много готового кода. С другой стороны, если имя свойства – число или числовая строка, то все современные браузеры сортируют такие свойства в целях внутренней оптимизации.

56
Q

Что выведет код? var codes = { // телефонные коды в формате “код страны”: “название” “7”: “Россия”, “38”: “Украина”, “1”: “США” }; for (var code in codes) alert( code );

A

for (var code in codes) alert( code ); // 1, 7, 38 Интерпретатор JavaScript видит, что строка на самом деле является числом и преобразует ключ в немного другой внутренний формат. Дополнительным эффектом внутренних оптимизаций является сортировка. А что, если мы хотим, чтобы порядок был именно таким, какой мы задали? Это возможно. Можно применить небольшой хак, который заключается в том, чтобы сделать все ключи нечисловыми, например, добавим в начало дополнительный символ ‘+’

57
Q

Как превратить дробь в целое?

A

var n = 12.345; alert( n.toFixed(2) ); // “12.35” alert( n.toFixed(0) ); // “12” alert( n.toFixed(5) ); // “12.34500”

58
Q

Сработает ли округление целого типа так - alert(12.toFixed(1)); ?

A

…Но если число целое, то будет проблема: alert(12.toFixed(1)); // ошибка! Ошибка произойдёт потому, что JavaScript ожидает десятичную дробь после точки. Это – особенность синтаксиса JavaScript. Вот так – будет работать: alert( 12..toFixed(1) ); // 12.0

59
Q

Какой внутренний размер целых чисел в js?

A

Все числа в JavaScript, как целые так и дробные, имеют тип Number и хранятся в 64-битном формате IEEE-754, также известном как «double precision».

60
Q

Чему равно 3e-5?

A

// здесь 3 сдвинуто 5 раз вправо, за десятичную точку. alert( 3e-5 ); // 0.00003