Несколько дней новогоднего волшебства:
Успейте начать обучение в 2018-ом году со скидкой до 30%!
Выбрать курс

Беглый обзор JavaScript и TypeScript

JS_Deep_17.07_Site.png

JavaScript

Язык был создан инженером Netscape Бренданом Эйком в 1995 году за 10 дней. В то время название языка варьировалось между JavaScript, Mocha, LiveScript или JScript (альтернативная версия языка от компании Microsoft). В результате многочисленных споров и обсуждений внутри компании Netscape было решено, что новый язык должен быть похож на Java и, можно даже сказать, что JavaScript был назван в его честь.

Основная идея была в том, чтобы создать «лёгкий для написания скриптов» язык для создания виджетов, простых компонентов и HTML-манипуляций. Термин «язык сценариев» означает высокоуровневый интерпретируемый язык программирования.

В числе прочих характеристик JavaScript также является динамическим и слабо типизированным. То есть, переменные могут легко менять тип присваиваемых значений. Например:

– Boolean – логический тип с возможными значениями true или false; – Number – числовой тип данных. Помните, что JavaScript поддерживает только числа с плавающей точкой и 0.99999999999999999 === 1; – String – строки, которые можно декларировать с помощью всевозможных символов кавычек ', " или `; – Object – сложный тип данных, который часто ассоциируют с понятием JSON.

Два других типа данных null и undefined крайне занимательны тем, что, хотя оба означают пустое значение, тем не менее, несут разные смыслы:

Null – означает, что переменная не содержит значение; – Undefined – означает, что переменная не определена.

И последний, недавно добавленный тип: – Symbol – помогает решать задачи связанные с приватностью данных.

Под динамической природой языка часто подразумевает возможность приведения типов данных на лету:

a = 1 // присвоить 1 к переменной a
a == true // верно
a == '1' // верно
a == [1] // верно
a === true // неверно

и много других забавных примеров.

Возможность слабой типизации JavaScript удобно использовать для создания динамических объектов и свойств, но порой она привносит в код двусмысленность и плохую читабельность:

function doSomething(data) {
 let callback
 if (typeof data === 'function') {
   callback = data
 }
 // ...
 callback()
}

TypeScript

Язык, который компилируется (или, транспилируется) в стандартный JavaScript. Также TypeScript позволяет опционально описывать типы. Рассмотрим пример:

function sum(a, b) {
 return a + b
}

Выражение sum(true, false) валидно в JavaScript. Угадайте, чему равен результат?

В TypeScript с помощью символа «:» можно явно указать, какие типы данных ожидаются в качестве аргументов, параметров или типов возвращаемого значения функции:

function sum(a: number, b: number): number {
 return a + b
}

В таком случае выражение sum(true, false) будет распознаваться как «неправильное» из-за использованных не-number значений.

Так как TypeScript – язык-надмножество JavaScript, то все основные типы также в нём доступны:

boolean, number, string; – arrays, tuples - могут быть указаны в различных нотациях.

const a: Array<number> = [3, 1, 4]
// или
const b: number[]
// и
const c: [string, number] = ["hello", 10]
</number>

Также null and undefined доступны и обычно могут быть использованы как «нулевые» значения к любым типам данных (не в случае флага компилятора --strictNullChecks)

Другие интересные типы:

any – для неизвестных типов данных переменных; – void – отсутствие возвращаемого значения в функции; – never – означает, что функция всегда выкидывает исключение и никогда не возвращает значение.

Количество инструментов и программ, написанных на или для языка TypeScript постоянно растёт. В качестве примеров можно привести:

Visual Studio Code – бесплатное IDE с открытым кодом, созданное компанией Microsoft; deno – недавно представленный v8-TypeScript движок, который в будущем может составить конкуренцию Node.

Полезные материалы: – Brendan Eich - Popularity - 3 of April, 2008Wat - A lightning talk by Gary Bernhardt from CodeMash 2012TypeScript - Basic TypesTypeScript - Advanced TypesTypeScript runtime built on V8

Есть вопрос? Напишите в комментариях!

Автор
0 комментариев
Для комментирования необходимо авторизоваться