Объясните, как работает JSONP (и почему это не совсем AJAX)
JSONP (JSON с набивкой) - это способ, часто используемый для обхода политики ограничения домена в браузерах, потому что Ajax-запросы с текущей страницы к серверу, находящемуся в другом домене, запрещены.
JSONP работает, отправляя запрос к серверу в другом домене через тег <noscript> и обычно с параметром запроса callback, например:
HTML:
JSONP может быть небезопасным и иметь повышенный риск. Поскольку JSONP - это действительно JavaScript, и он может делать все остальное, что может делать JavaScript, то вы должны быть уверены в надежности поставщика данных JSONP.
В наши дни, CORS является рекомендуемым подходом и JSONP является способом для его обхода.
JSONP (JSON с набивкой) - это способ, часто используемый для обхода политики ограничения домена в браузерах, потому что Ajax-запросы с текущей страницы к серверу, находящемуся в другом домене, запрещены.
JSONP работает, отправляя запрос к серверу в другом домене через тег <noscript> и обычно с параметром запроса callback, например:
https://example.com?callback=printData. Затем сервер обернет данные внутри функции с именем printData и вернет их клиенту.HTML:
<noscript>JS:
function printData(data) {
console.log(`My name is ${data.name}!`);
}
</noscript>
<noscript src="https://example.com?callback=printData"></noscript>
// Файл загружен с https://example.com?callback=printDataУ клиента должна быть функция printData в своей глобальной области видимости, и эта функция будет выполнена клиентом, когда будет получен ответ с сервера из другого домена.
printData({ name: 'Yang Shun' });
JSONP может быть небезопасным и иметь повышенный риск. Поскольку JSONP - это действительно JavaScript, и он может делать все остальное, что может делать JavaScript, то вы должны быть уверены в надежности поставщика данных JSONP.
В наши дни, CORS является рекомендуемым подходом и JSONP является способом для его обхода.
В чем разница между "атрибутом" (attribute) и "свойством" (property)?
Атрибуты определены в разметке HTML, а свойства определены в DOM. Чтобы проиллюстрировать разницу, представьте, что у нас есть это текстовое поле в HTML: <input type="text" value="Hello">.
Атрибуты определены в разметке HTML, а свойства определены в DOM. Чтобы проиллюстрировать разницу, представьте, что у нас есть это текстовое поле в HTML: <input type="text" value="Hello">.
const input = document.querySelector('input');
console.log(input.getAttribute('value')); // Hello
console.log(input.value); // Hello
Но после того, как вы измените значение текстового поля, добавив к нему "World!", будет: console.log(input.getAttribute('value')); // Hello
console.log(input.value); // Hello World!Человеческий фактор. Успешные проекты и команды
Эта книга рассказывает, как правильно работать с людьми, особенно с разработчиками и дизайнерами.
ДеМарко и Тимоти обращают внимание на ошибки, которые усложняют управление командой. Одна из них — чрезмерное стремление руководителя улучшить технологии работы, автоматизировать процессы. От этого страдает управление человеческими ресурсами, которое получает низший приоритет.
Эта книга рассказывает, как правильно работать с людьми, особенно с разработчиками и дизайнерами.
ДеМарко и Тимоти обращают внимание на ошибки, которые усложняют управление командой. Одна из них — чрезмерное стремление руководителя улучшить технологии работы, автоматизировать процессы. От этого страдает управление человеческими ресурсами, которое получает низший приоритет.
Алгоритмы. Построение и анализ
В книге описаны самые разнообразные алгоритмы, сочетается широкий диапазон тем с глубиной и полнотой изложения; при этом изложение доступно для читателей самого разного уровня подготовки. Каждая глава книги относительно самодостаточна и может использоваться в качестве отдельной темы для изучения. Алгоритмы в книге "Алгоритмы. Построение и анализ" описаны простым человеческим языком и с применением псевдокода, который понятен любому, кто хоть в небольшой степени знаком с программированием, а пояснения принципов их работы даны без излишней математической строгости и требуют лишь элементарных знаний.
В книге описаны самые разнообразные алгоритмы, сочетается широкий диапазон тем с глубиной и полнотой изложения; при этом изложение доступно для читателей самого разного уровня подготовки. Каждая глава книги относительно самодостаточна и может использоваться в качестве отдельной темы для изучения. Алгоритмы в книге "Алгоритмы. Построение и анализ" описаны простым человеческим языком и с применением псевдокода, который понятен любому, кто хоть в небольшой степени знаком с программированием, а пояснения принципов их работы даны без излишней математической строгости и требуют лишь элементарных знаний.
Что такое TypeScript? Для чего он нужен и какие проблемы решает?
Typenoscript — это скриптовый язык, компилируемый в JavaScript. Разработка Microsoft, которая, на сегодняшний день, успела завоевать и фанатов и недоброжелателей.
В TypeScript типизация статическая, что избавляет от множества проблем. Есть числовой тип, строковый, логический и другие. Возможно описывать и свои типы данных, например, с помощью enum
И в JS, и в TS есть поддержка объектно-ориентированного программирования: классы, объекты, наследование. Однако TypeScript шагнул чуть дальше и использует больше возможностей ОПП. В том числе, например, интерфейсы:
- определение полей в конструкторе;
- преобразование типов;
- абстрактные классы;
- обобщение и так далее.
Typenoscript — это скриптовый язык, компилируемый в JavaScript. Разработка Microsoft, которая, на сегодняшний день, успела завоевать и фанатов и недоброжелателей.
В TypeScript типизация статическая, что избавляет от множества проблем. Есть числовой тип, строковый, логический и другие. Возможно описывать и свои типы данных, например, с помощью enum
И в JS, и в TS есть поддержка объектно-ориентированного программирования: классы, объекты, наследование. Однако TypeScript шагнул чуть дальше и использует больше возможностей ОПП. В том числе, например, интерфейсы:
interface IPost {
id: number;
text: string;
}
class Message implements IPost {
id: number;
text: string;
senderId: number;
recieverId: number;
}
Другой большой плюс — модификаторы доступа. Их в TypeScript три: public, private и protected. class User {
//Приватные члены класса, которые недоступны извне
private id: number;
private login: number;
}
Также есть и другие возможности:- определение полей в конструкторе;
- преобразование типов;
- абстрактные классы;
- обобщение и так далее.
Что выведется в консоль?
Anonymous Quiz
3%
8
19%
[1, 2, 3, 4, 5, 6]
62%
[1, 2, 3, 4, 5, 6, 7, 8]
16%
Error
Рассказать про следующие виды типизации, их особенности, плюсы и минусы:
слабая / сильная
Сильная типизация выделяется тем, что язык не позволяет смешивать в выражениях различные типы и не выполняет автоматические неявные преобразования, например нельзя вычесть из строки множество. Языки со слабой типизацией выполняют множество неявных преобразований автоматически, даже если может произойти потеря точности или преобразование неоднозначно.
статическая / динамическая
Статическая определяется тем, что конечные типы переменных и функций устанавливаются на этапе компиляции. Т.е. уже компилятор на 100% уверен, какой тип где находится. В динамической типизации все типы выясняются уже во время выполнения программы.
явная / неявная
Явно-типизированные языки отличаются тем, что тип новых переменных / функций / их аргументов нужно задавать явно. Соответственно языки с неявной типизацией перекладывают эту задачу на компилятор / интерпретатор.
структурная / номинативная
В отличие от номинативной, которая следит за названиями типов, структурная типизация принимает решение о совместимости типов на основе их содержимого.
слабая / сильная
Сильная типизация выделяется тем, что язык не позволяет смешивать в выражениях различные типы и не выполняет автоматические неявные преобразования, например нельзя вычесть из строки множество. Языки со слабой типизацией выполняют множество неявных преобразований автоматически, даже если может произойти потеря точности или преобразование неоднозначно.
статическая / динамическая
Статическая определяется тем, что конечные типы переменных и функций устанавливаются на этапе компиляции. Т.е. уже компилятор на 100% уверен, какой тип где находится. В динамической типизации все типы выясняются уже во время выполнения программы.
явная / неявная
Явно-типизированные языки отличаются тем, что тип новых переменных / функций / их аргументов нужно задавать явно. Соответственно языки с неявной типизацией перекладывают эту задачу на компилятор / интерпретатор.
структурная / номинативная
В отличие от номинативной, которая следит за названиями типов, структурная типизация принимает решение о совместимости типов на основе их содержимого.
Что такое Type Assertions в TypeScript?
Type assertion представляет модель преобразования значения переменной к определенному типу.
Обычно в некоторых ситуациях одна переменная может представлять какой-то широкий тип, например, any, который по факту допускает значения различных типов. Однако при этом нам надо использовать переменную как значение строго определенного типа. И в этом случае мы можем привести к этому типу.
Есть две формы приведения. Первая форма заключается в использовании угловых скобок:
Type assertion представляет модель преобразования значения переменной к определенному типу.
Обычно в некоторых ситуациях одна переменная может представлять какой-то широкий тип, например, any, который по факту допускает значения различных типов. Однако при этом нам надо использовать переменную как значение строго определенного типа. И в этом случае мы можем привести к этому типу.
Есть две формы приведения. Первая форма заключается в использовании угловых скобок:
let someAnyValue: any = "hello world!";
let strLength: number = (<string>someAnyValue).length;
console.log(strLength); // 12
let someUnionValue: string | number = "hello work";Вторая форма заключается в применении оператора as:
strLength = (<string>someUnionValue).length;
console.log(strLength); // 10
let someAnyValue: any = "hello world!";
let strLength: number = (someAnyValue as string).length;
console.log(strLength); // 12
let someUnionValue: string | number = "hello work";
strLength = (someUnionValue as string).length;
console.log(strLength); // 10