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. Какие существуют типы нод? |