01234 | 56789 | |
---|---|---|
1. | В чём отличия в типизации между JS и Java? |
Для чего нужна конструкция @extend в SCSS? |
2. | Для чего нужна инструкция @mixin в SCSS? |
Принципы реализации наследования в JS (ES5) |
3. | JS-функция, удаляющая все гиперссылки со страницы. |
JS-функция, заменяющая содержимое адресной строки браузера на https://se.ifmo.ru |
-
В чём отличия в
типизации
между JS и Java?Java Javascript статическая динамическая сильная слабая has primitive types everything - object (except null, undefined) Статическая
- тип переменной должен быть объявлен явно и не может быть изменён после объявления (compile-time checking)int x = 10; x = "hello"; // Компилятор выдаст ошибку
Динамическая
- тип переменной определяется во время выполнения программы, может меняться (runtime checking)let x = 10; x = "hello"; // вообще пахую
Сильная
(аура) - нет автоматического преобразования между большинством типов.int x = 10; double y = x; // Необходимо явное приведение: double y = (double) x;
Слабая
- автоматическое преобразование типовlet x = 10; let y = "10"; console.log(x + y); // Вывод "1010"
Примитивные типы
- int, char, float, double, ...-
Не объекты, не имеют методов
-
в Js всё объекты, поэтому можно так:
let str = "hello"; console.log(str.toUpperCase()); // HELLO
-
-
Для чего нужна инструкция
@mixin
в SCSS?@mixin
используется для создания многоразовых CSS-блоков кода.- Можно вставлять в различные части SCSS-кода с помощью инструкции
@include
- Устранение повторения кода, good mantainability, динамические стили
миксины могут принимать аргументы, в этом их отличие от
extends
@mixin circle($radius) { width: $radius; height: $radius; } .some-div { @include circle(10px); }
-
JS-функция,
удаляющая
всегиперссылки
со страницы:function removeHyperlinks() { const links = document.querySelectorAll('a'); links.forEach(link => link.remove()); }
-
Для чего нужна конструкция
@extend
в SCSS?@extend
- наследование всех стилей одного селектора в другой.- наследование стилий, не требующих динамических значений
в отличие от миксинов, это статичные стили (нет передаваемых аргументов)
%message { border: 1px solid black; } .success { @extend %message; border-color: green; }
- если использовать
.message
вместо%
, то этот класс должен существовать в итоговом CSS-файле. - При использовании
шаблонов стилей
с%
- плейсхолдеры не будут компилироваться в итоговый CSS без приписки@extend
-
Принципы реализации
наследования
в JS (ES5):- С помощью прототипов (
prototype
).
Каждый объект в Js имеет свой "прототип", от которого он наследует свойства и методы
- Функция-конструктор для создания объектов
В ES5, "классы" создаются с использованием функций-конструкторов.
- Добавление методов в прототип
Методы, которые должны быть унаследованы, добавляются в прототип функции-конструктора.
- Наследование
Прототип дочернего объекта ссылается на экземпляр родительского объекта.
- С помощью прототипов (
-
JS-функция,
заменяющая
содержимоеадресной строки
браузера на https://se.ifmo.ru:function changeURL() { window.location.href = 'https://se.ifmo.ru'; }
function changeURL() { window.location.replace("https://se.ifmo.ru") }
-
RESTful request using AJAX
- using XMLHttpRequest:
var xhr = new XMLHttpRequest(); xhr.open("GET", "https://api.example.com/data", true); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { console.log(JSON.parse(xhr.responseText)); } }; xhr.send();
- using Fetch API:
fetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error));
- using Axious:
axios.get('https://api.example.com/data') .then(response => { console.log(response.data); });
- jQuery
$.ajax
:
$.ajax({ url: 'https://api.example.com/data', type: 'GET', success: (data) => { console.log(data); }, error: (error) => { console.error(error); } });
- jQuery
$.get
:
$.get("https://api.example.com/data", function(data) { console.log(data); }) .fail(function(err) { console.error(err); });
- SuperAgent:
const superagent = require('superagent'); superagent.get('https://api.example.com/data') .then(response => { console.log(response.body); }) .catch(error => { console.error(error); });
-
What is hoisting and how does it work in JavaScript?
- Hoisting is a behavior where variable and function declarations are moved to the top of their containing scope during the compilation phase. Variables declared with var are hoisted and initialized with undefined, while function declarations are hoisted with their full definition.
// This will not throw an error because of hoisting console.log(a); // undefined var a = 5;
-
Tricky ECMAScript Topics
- Block Scope Variables:
let
andconst
have block scope.var
has function scope. - Template Literals: Allows embedding expressions:
const greeting = 'Hello, ${name}!';
- Destructuring:
- Unpacking values from arrays or properties from objects:
const { a, b } = obj;
- Value Swapping:
[a, b] = [b, a];
- Unpacking values from arrays or properties from objects:
- OOP:
class Animal {}
,class Dog extends Animal {}
- Promises and Callbacks:
- Block Scope Variables:
-
Webcosket
- protocol that establishes a two-way, full-duplex communication channel over a single TCP connection. It's commonly used in real-time applications like chat, notifications, and live updates.
const socket = new WebSocket('ws://example.com');
socket.onopen = () => { socket.send('Hello, Server!'); }; socket.onmessage = (event) => { console.log(`Received: ${event.data}`); };
-
DHTML
- combination of DOM, HTML, CSS, and JavaScript to create dynamic and interactive web pages
<!DOCTYPE html> <html> <head> <title>Simple DHTML Example</title> </head> <body> <h1 id="myHeader">Hello World!</h1> <button type="button" onclick="changeText()">Click Me!</button> <script src="script.js"></script> </body> </html>