Проект

Общее

Профиль

JAVASCRIPT » История » Версия 4

Александр Александров, 24.04.2019 22:39

1 1 Александр Александров
h1. JAVASCRIPT
2
3
h2. Вопросы
4
5
# Как переадресовать страницу в JavaScript?
6
# Сколько параметров можно передать функции?
7
# Нужно алертом вывести какое-то сообщение, спустя 3 секунды после запуска скрипта. Как это сделать?
8
# Чем отличается наследование в JavaScript от наследования в PHP?
9
# Приведи пример наследования в JavaScript.
10
# Пара слов об объектах в JavaScript?
11
# Что представляет из себя метод объекта в JavaScript?
12
# Зачем в JavaScript перед переменной писать var?
13 3 Александр Александров
# Есть две функции: function f(a,b) { return a+b } и var f = function(a,b) { return a+b } Есть ли между ними разница? Если есть то какая?
14 1 Александр Александров
# Как создать массив в JavaScript?
15
# Можно ли в JavaScript использовать функцию в качестве конструктора?
16 3 Александр Александров
# Сколько и какие конструкции для циклов есть в JAVASCRIPT?
17
# Что cделает код: break mark; ?
18 1 Александр Александров
# Можно ли задать массив таким образом: var a = “a,b”.split(‘,’)?
19
# Что выведет alert(typeof null); ?
20
# Что выведет alert(null instanceof Object); ?
21
# 0.1+ 0.2 == 0.3 ?
22
# Что выведет alert(typeof NaN); ?
23
# Что выведет alert(NaN === NaN); ?
24
# В чём различие свойств innerHTML и outerHTML?
25
# Какая разница между операторами == и ===?
26
# В чем разница между Object.getOwnPropertyNames() и Object.keys()?
27
# С помощью какой конструкции языка можно управлять потоком выполнения скрипта и отслеживать ошибки?
28
# Почему вызов a(); происходит успешно, а вызов b(); выдает ошибку?
29
# Что такое глобальные переменные ? Как они создаются ? Какие проблемы связаны с использованием глобальных переменных?
30
# Что такое замыкания (closure) в JavaScript?
31
# Напишите функцию принимающую строку с именем файла и возвращающую расширение (фрагмент после последней точки).
32
# Что вернет выражение +new Date()? Чем отличается от Date.now().
33
# Какое значение возвращает данное предложение ~~3.14?
34
# Какое значение возвращает данное предложение?
35
# Что покажут эти два alert?
36
# Чему равно foo.length?
37
# Что такое prototype в javascript?
38
# Какие способы навешивания обработчиков событий вы знаете?
39
# Eсть ли разница между window и document?
40
# Вызываются ли document.onload и window.onload одновременно?
41
# Является ли атрибут (attribute) аналогом свойства (property)?
42
# Как остановить дальнейшее распространение события?
43
# Назовите различные пути для получения элемента из DOM дерева?
44
# Какой наибыстрейший метод для получения элемента через css селектор?
45
# Могу ли я удалить удалить обработчик события с элемента?
46
# Почему querySelectorAll(‘.my-class’) медленнее, чем getElementsByClassName(‘myclass’)?
47
# Почему я не могу использовать forEach или похожий метод массива для NodeList?
48
# Если вам необходимо реализовать getElementByAttribute, как вы будете это делать?
49
# Как бы вы добавили класс к элементу через селектор?
50
# Как я могу запустить обработчик в фазе захвата, а не в фазе всплытия?
51
# Как проверить, что один элемент является дочерним другому?
52
# Какой метод больше всего подходит для создания DOM элемента? Что лучше innerHTML или createElement?
53
# Каким образом можно предотвратить множественный вызов обработчика для одного события?
54
# Что такое reflow?
55
# Как я могу проверить были событие отменено или нет?
56
# Какие причины reflow? Как можно уменьшить reflow?
57
# Что такое repaint и когда оно происходит?
58
# Есть ли что-то такое о чём нужно позаботится при использовании node.cloneNode()?
59
# Как быть уверенным в том, что DOM подготовлен и можно выполнять JavaScript, как реализовать $(document).ready?
60
# Что такое всплытие?
61
# Как можно уничтожить несколько элементов с одним вызовом click?
62
# Как предотвратить нажатие по ссылке?
63
# Создайте кнопку, которая удаляется при нажатии на неё, и создаются две новые кнопки в этом же месте.
64
# Как отлавливать все нажатия на странице?
65
# Как получить весь текст на странице?
66
# Что такое defer и async?
67
# Какие существуют типы нод?
68
69
h2. Ответы
70
71
h3. Как переадресовать страницу в JavaScript?
72
73 2 Александр Александров
{{dmsf_image(323)}}
74
75 1 Александр Александров
h3. Сколько параметров можно передать функции?
76
77 2 Александр Александров
Сколько угодно.
78
79 1 Александр Александров
h3. Нужно алертом вывести какое-то сообщение, спустя 3 секунды после запуска скрипта. Как это сделать?
80
81 2 Александр Александров
Так:
82
83
<pre><code class="javascript">
84
setTimeout(alert("Hello", 3000));
85
</code></pre>
86
87
или так:
88
89
<pre><code class="javascript">
90
setTimeout(functiom() {alert("Hello")}, 3000);
91
</code></pre>
92
93 1 Александр Александров
h3. Чем отличается наследование в JavaScript от наследования в PHP?
94
95 2 Александр Александров
В отличие от PHP, где наследование можно делать одним способом, в JavaScript таких способов много. На уровне языка реализовано наследование на прототипах. В JavaScript каждый объект может иметь ассоциацию с другим объектом - так называемый "прототип" (prototype). В случае, если поиск некоторого свойства (или метода) в исходном объекте заканчивается неудачно, интерпретатор пытается найти одноименное свойство (метод) в его прототипе, затем - в прототипе прототипа и т. д. К примеру, если мы затребовали обращение к obj.prop (или, что абсолютно то же самое, obj['prop']), JavaScript начнет искать свойство prop в самом объекте obj, затем – в прототипе obj, прототипе прототипа obj, и так до конца.
96
97 1 Александр Александров
h3. Приведи пример наследования в JavaScript.
98
99 2 Александр Александров
Например, пусть объект "cat" наследуется от объекта "animal". В наследовании на прототипах это реализуется как ссылка
100
101
<pre><code class="javascript">
102
cat.prototype = animal;
103
</code></pre>
104
105
Или вот чуть более развернутый пример. MyType наследуется от Obj:
106
107
{{dmsf_image(323)}}
108
109 1 Александр Александров
h3. Пара слов об объектах в JavaScript?
110
111 2 Александр Александров
Объекты (они же - ассоциативные массивы, хэши) и работа с ними в JavaScript реализованы не так, как в большинстве языков. Объект в JavaScript представляет собой обычный ассоциативный массив или, иначе говоря, "хэш". Он хранит любые соответствия "ключ => значение" и имеет несколько стандартных методов.
112
113 1 Александр Александров
h3. Что представляет из себя метод объекта в JavaScript?
114
115 2 Александр Александров
Метод объекта в JavaScript - это просто функция, которая добавлена в ассоциативный массив.
116
117 1 Александр Александров
h3. Зачем в JavaScript перед переменной писать var?
118
119 2 Александр Александров
Если создавать переменную через обычное присваивание - будет создана "глобальная переменная". Пример:
120
121
<pre>
122
max = 100;
123
</pre>
124
125
Если создавать переменную с использованием слова var, тогда будет создана "локальная переменная", которая перестаёт существовать после завершения работы функции. Пример:
126
127
<pre>
128
var max = 100;
129
</pre>
130
131 3 Александр Александров
h3. Есть две функции: function f(a,b) { return a+b } и var f = function(a,b) { return a+b } Есть ли между ними разница? Если есть то какая?
132 1 Александр Александров
133
Есть, разница в видимости функции. Вариант функции без var виден везде в текущей области видимости. В том числе и до самого определения функции. Вариант с var присваивает функцию переменной, поэтому такая функция видна только после определения.
134
135
h3. Как создать массив в JavaScript?
136
137 3 Александр Александров
Вот несколько способов.
138
139
{{dmsf_image(325)}}
140
141 1 Александр Александров
h3. Можно ли в JavaScript использовать функцию в качестве конструктора?
142
143 3 Александр Александров
Вот так:
144 1 Александр Александров
145 3 Александр Александров
{{dmsf_image(326)}}
146
147
h3. Сколько и какие конструкции для циклов есть в JAVASCRIPT?
148
149
Три: for, while и do...while.
150
151
h3. Что cделает код: break mark; ?
152
153
Выйдет из текущего блока цикла или switch на метку "mark".
154
155 1 Александр Александров
h3. Можно ли задать массив таким образом: var a = “a,b”.split(‘,’)?
156
157 3 Александр Александров
Да, можно.
158
159 1 Александр Александров
h3. Что выведет alert(typeof null); ?
160
161 3 Александр Александров
Выведет сообщение "object".
162
163 1 Александр Александров
h3. Что выведет alert(null instanceof Object); ?
164
165 3 Александр Александров
Выведет сообщение "false".
166
167 1 Александр Александров
h3. 0.1+ 0.2 == 0.3 ?
168
169 3 Александр Александров
Нет, т.к. вычисленное значение будет равно 0.30000000000000004. Это действие точности вычислений и проявляется она не только в JavaScript
170
171 1 Александр Александров
h3. Что выведет alert(typeof NaN); ?
172
173 3 Александр Александров
"Number"
174
175 1 Александр Александров
h3. Что выведет alert(NaN === NaN); ?
176
177 3 Александр Александров
"false"
178
179 1 Александр Александров
h3. В чём различие свойств innerHTML и outerHTML?
180
181 3 Александр Александров
Свойство любого DOM элемента innerHTML содержит HTML код, который находится внутри этого элемента. При установке нового значения этого свойства, внутренний HTML код рендерится браузером заново. outerHTML почти аналогичен innerHTML, разница в том, что он возвращает полный HTML элемента. Также, важно отметить, что innerHTML поддерживается всеми современными браузерами, а outerHTML поддерживается в IE (с некоторыми отличиями от остальных браузеров), в последних версиях Opera, и в браузерах на основе последних WebKit (Safari, Chrome), но не поддерживается в Firefox.
182
183
Для кода:
184
185
{{dmsf_image(327)}}
186
187
innerHTML возвратит:
188
189
<pre><code class="javascript">
190
<p class="inner"></p>
191
</code></pre>
192
193
outerHTML возвратит:
194
195
<div class="outer"><p class="inner"></p></div>
196
197 1 Александр Александров
h3. Какая разница между операторами == и ===?
198
199 3 Александр Александров
Оператор == сравнивает на равенство, а вот === сравнивает на идентичность. Плюс оператора === состоит в том, что он не приводит два значения к одному типу. Именно из-за этого он обычно и используется.
200
201 1 Александр Александров
h3. В чем разница между Object.getOwnPropertyNames() и Object.keys()?
202
203 3 Александр Александров
Object.getOwnPropertyNames() возвращает перечислимые и не перечислимые свойства из объекта или массива.
204
205
{{dmsf_image(328)}}
206
207
Object.keys() возвращает перечислимые свойства из объекта или массива
208
209
{{dmsf_image(329)}}
210
211 1 Александр Александров
h3. С помощью какой конструкции языка можно управлять потоком выполнения скрипта и отслеживать ошибки?
212
213 3 Александр Александров
Это возможно с помощью конструкции try{}... catch{}
214
215
{{dmsf_image(330)}}
216
217 1 Александр Александров
h3. Почему вызов a(); происходит успешно, а вызов b(); выдает ошибку?
218 3 Александр Александров
219
{{dmsf_image(331)}}
220
221
Функция а() инициализируется на этапе загрузки скрипта, как бы "всплывает вверх" а функция б инициализируется, когда объявляется переменная b
222 1 Александр Александров
223
h3. Что такое глобальные переменные ? Как они создаются ? Какие проблемы связаны с использованием глобальных переменных?
224
225 4 Александр Александров
Глобальная переменная - переменная, которая доступна (видима) во всем документе, в отличии от локальной (ограничена рамками блока программного кода, внутри которого она определена)
226
227
<pre><code class="javascript">
228
var = 5;
229
function myFunction() {
230
    alert(myvar);
231
}
232
</code></pre>
233
234
Большинство JavaScript разработчиков избегает использования глобальных переменных. Одна из причин - возможный конфликт имен глобальных и локальных переменных. Так же код использующий глобальные переменные может быть тяжелее сопровождать и тестировать.
235
236 1 Александр Александров
h3. Что такое замыкания (closure) в JavaScript?
237
238 4 Александр Александров
Простыми словами это внутренняя функция, т.е. функция в функции. Замыканием (closure) называют потому, что после выполнения родительской или внешней функции, код внутренней все еще "живет" в интерпретаторе, и его можно выполнить. Ошибок не возникнет даже если внутренняя функция (замыкание) будет использовать переменные из внешней функции. Например, эту особенность можно использовать для создания функций обработчиков событий:
239
240
{{dmsf_image(332)}}
241
242 1 Александр Александров
h3. Напишите функцию принимающую строку с именем файла и возвращающую расширение (фрагмент после последней точки).
243
244 4 Александр Александров
<pre><code class="javascript">
245
function getExtension(filename) {
246
    var fragments = filename.split(".");
247
    return fragments[fragments.length - 1];
248
}
249
</code></pre>
250
251 1 Александр Александров
h3. Что вернет выражение +new Date()? Чем отличается от Date.now().
252
253 4 Александр Александров
Ответ в том, что +new Date(); создаст экземпляр объекта Date и благодаря + переведет его в числовой формат. Во втором случае вызовется статический метод конструктора, который является более приоритетным, т.к. во-первых он не требует создания экземпляра, а во-вторых является более понятным.
254
255 1 Александр Александров
h3. Какое значение возвращает данное предложение ~~3.14?
256
257 4 Александр Александров
Ответ: 3
258
259 1 Александр Александров
h3. Какое значение возвращает данное предложение?
260
261 4 Александр Александров
"i'm a lasagna hog".split("").reverse().join("");
262
263
Ответ: "goh angasal a m’i"
264
265 1 Александр Александров
h3. Что покажут эти два alert?
266
267 4 Александр Александров
{{dmsf_image(333)}}
268
269
Ответ: "Hello World" и ReferenceError: bar is not deÙned
270
271 1 Александр Александров
h3. Чему равно foo.length?
272
273 4 Александр Александров
<pre><code class="javascript">
274
var foo = [];
275
foo.push(1);
276
foo.push(2);
277
</code></pre>
278
279
Ответ: 2
280
281 1 Александр Александров
h3. Что такое prototype в javascript?
282
283 4 Александр Александров
В общих чертах prototype - это свойство позволяющее добавлять уже существующим объектам свойства, также используется для эмуляции наследования классов в JavaScript. Подробный ответ написан здесь . Еще как вариант, можно упомянуть о Prototype.js. Это популярная библиотека добавляющая удобные ООП возможности в программы на JavaScript-е.
284
285 1 Александр Александров
h3. Какие способы навешивания обработчиков событий вы знаете?
286 4 Александр Александров
287
События можно добавлять тремя способами:
288
289
* htmlElement.onclick = function(event) { .... } - так можно добавить только один обработчик
290
* htmlElement.addEventListener( "click", ... ) - так можно навесить несколько обработчиков, сохраняет порядок обработчиков
291
* htmlElement.attachEvent( "on"+имя_события, обработчик) - тоже можно навесить несколько, не сохраняет порядок обработчиков, нет доступа к элементу на котором сработало событие.
292 1 Александр Александров
293
h3. Eсть ли разница между window и document?
294
295
h3. Вызываются ли document.onload и window.onload одновременно?
296
297
h3. Является ли атрибут (attribute) аналогом свойства (property)?
298
299
h3. Как остановить дальнейшее распространение события?
300
301
h3. Назовите различные пути для получения элемента из DOM дерева?
302
303
h3. Какой наибыстрейший метод для получения элемента через css селектор?
304
305
h3. Могу ли я удалить удалить обработчик события с элемента?
306
307
h3. Почему querySelectorAll(‘.my-class’) медленнее, чем getElementsByClassName(‘myclass’)?
308
309
h3. Почему я не могу использовать forEach или похожий метод массива для NodeList?
310
311
h3. Если вам необходимо реализовать getElementByAttribute, как вы будете это делать?
312
313
h3. Как бы вы добавили класс к элементу через селектор?
314
315
h3. Как я могу запустить обработчик в фазе захвата, а не в фазе всплытия?
316
317
h3. Как проверить, что один элемент является дочерним другому?
318
319
h3. Какой метод больше всего подходит для создания DOM элемента? Что лучше innerHTML или createElement?
320
321
h3. Каким образом можно предотвратить множественный вызов обработчика для одного события?
322
323
h3. Что такое reflow?
324
325
h3. Как я могу проверить были событие отменено или нет?
326
327
h3. Какие причины reflow? Как можно уменьшить reflow?
328
329
h3. Что такое repaint и когда оно происходит?
330
331
h3. Есть ли что-то такое о чём нужно позаботится при использовании node.cloneNode()?
332
333
h3. Как быть уверенным в том, что DOM подготовлен и можно выполнять JavaScript, как реализовать $(document).ready?
334
335
h3. Что такое всплытие?
336
337
h3. Как можно уничтожить несколько элементов с одним вызовом click?
338
339
h3. Как предотвратить нажатие по ссылке?
340
341
h3. Создайте кнопку, которая удаляется при нажатии на неё, и создаются две новые кнопки в этом же месте.
342
343
h3. Как отлавливать все нажатия на странице?
344
345
h3. Как получить весь текст на странице?
346
347
h3. Что такое defer и async?
348
349
h3. Какие существуют типы нод?
Go to top