Найти в Дзене

Вопросы на собеседованиях. JavaScript/Типы данных, ссылочные типы данных, приведение/Знание основ типов и способность их определения #4.

Что будет если сложить число и строку, в которой записано число? JavaScript может делать преобразования самостоятельно. Неявное преобразование происходит, когда мы заставляем JavaScript работать со значениями разных типов. Например, если мы хотим «сложить» число и строку, JS приведёт примитивные значения к строке, если мы используем +, когда один из операндов — строка:
5 + '3' === '53'
5 - '3' === 2
5 + '-3' === '5-3'
Как проверить тип переменной? Что возвращает typeof null ? Для проверки типа данных переменной можно воспользоваться оператором typeof
console.log(typeof 42); // "number"
console.log(typeof 'blubber'); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undeclaredVariable); // "undefined"
Оператор typeof возвращает строку, содержащую тип аргумента. Что такое Symbol? Символ (Symbol) — примитивный тип, значения которого создаются с помощью вызова функции Symbol(). Каждый созданный символ уникален. Даже если мы создадим множество символов с о
Оглавление

Что будет если сложить число и строку, в которой записано число?

JavaScript может делать преобразования самостоятельно. Неявное преобразование происходит, когда мы заставляем JavaScript работать со значениями разных типов. Например, если мы хотим «сложить» число и строку, JS приведёт примитивные значения к строке, если мы используем +, когда один из операндов — строка:
5 + '3' === '53'
5 - '3' === 2
5 + '-3' === '5-3'


Как проверить тип переменной? Что возвращает typeof null ?

Для проверки типа данных переменной можно воспользоваться оператором typeof
console.log(typeof 42); // "number"
console.log(typeof 'blubber'); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undeclaredVariable); // "undefined"

Оператор typeof возвращает строку, содержащую тип аргумента.

Что такое Symbol?

Символ (Symbol) — примитивный тип, значения которого создаются с помощью вызова функции Symbol(). Каждый созданный символ уникален. Даже если мы создадим множество символов с одинаковым описанием, это всё равно будут разные символы. Описание – это просто метка, которая ни на что не влияет.
let sym1 = Symbol();
let sym2 = Symbol("foo");
let sym3 = Symbol("foo");
console.log(sym2 === sym3) // false

Символы могут использоваться в качестве имён свойств в объектах. Символьные свойства могут быть прочитаны только при прямом обращении и не видны при обычных операциях.

Созданный символ уникален, но как быть, если он нужен в нескольких местах программы? Для решения этой проблемы существует глобальный реестр символов, он хранит символы по строковым ключам. При обращении по ключу всегда будет возвращаться один и тот же символ.

Работа с реестром символов организована с помощью двух методов:

  • Symbol.for(ключ) — возвращает символ, хранящийся по ключу. Если символа ещё не существует, он создаётся автоматически.
  • Symbol.keyFor(символ) — возвращает строковый ключ, который хранит переданный символ или undefined, если символ не хранится в реестре.


const secondaryId = Symbol()
const user = {
'id': 193,
'name': 'Ольга',
[secondaryId]: 'olga-1'
}
console.log(Symbol.keyFor(secondaryId)); // undefined

const newSym = Symbol.for('registryKey')
const newestSym = Symbol.for('registryKey')
console.log(newSym === newestSym); // true

user[newSym] = 'hello'
console.log(Symbol.keyFor(newSym)); // registryKey

Чем специфичен JS? Какие у него особенности?

JavaScript — это язык программирования, который в первую очередь применяют в вебе. С его помощью сайты делают интерактивными: добавляют всплывающие окна, анимацию, кнопки лайков и формы для отправки информации. Его ещё называют главным языком фронтенда — «лицевой» стороны сайта, с которой взаимодействуют пользователи.
JavaScript похож на Java, Python, Go, C#, но имеет свои особенности:

  • Интерпретируемый, а не компилируемый. Все языки программирования делятся на две группы. Код на компилируемых языках нужно сначала пропустить через специальную программу, компилятор, и только потом его можно использовать. Большинство современных языков как раз компилируемые в отличие от JavaScript.

    Код на интерпретируемом языке компилировать не нужно. Его пишут и сразу передают программе-интерпретатору, которая тут же его выполняет. Это ускоряет разработку, но требует запуска только в связке с интерпретатором. Правда, интерпретатор JavaScript встроен во все современные браузеры, так что проблем с запуском кода нет.
  • Мультипарадигменный. В программировании существует несколько парадигм:
    ● Объектная. В ней для каждой сущности в коде, например кнопки заказа, создают объекты. А затем прописывают связи между этими объектами.
    ● Функциональная. В ней больше внимания уделяют конкретным инструкциям. Кнопка здесь — не объект, в коде она обозначена как порядок действий, которые происходят после нажатия.
    ● Императивная. Здесь код пишут как чёткий набор инструкций, который выполняется строго последовательно. Императивная и функциональная парадигма часто применяются вместе.

    Часто языки ориентированы на работу с одной парадигмой. JavaScript не такой — он не диктует, как писать код, и позволяет придерживаться разных стилей и способов.
  • Без строгой типизации. Есть языки программирования со статической типизацией. Если создать переменную, нужно сначала обязательно задать её тип, например число. И ничего, кроме числа, хранить в ней нельзя.
    У языка JavaScript
    типизация динамическая — в переменную можно положить что угодно. Это облегчает написание кода, но может вызвать ошибки. Например, JavaScript позволит сравнить строку с числом и даже выдаст какой-то результат. Что больше, «корова» или «81»? JavaScript знает ответ.
  • Интегрирован с HTML и CSS в браузерах. HTML и CSS — это языки разметки для сайтов. Они не относятся к языкам программирования, так как не позволяют писать функции и что-то обрабатывать. С их помощью задают внешний вид сайта: расположение блоков, размер шрифта, цвета. Чтобы сайт стал интерактивным, нужен язык программирования, и JavaScript тут подходит идеально. Современные браузеры позволяют просто вписать код на JavaScript прямо в разметку, написанную на HTML и CSS, — и всё заработает.

    Часто для удобства скрипты пишут в отдельных файлах, а потом вставляют в код отсылку на сам файл. Это позволяет не перегружать код на странице и использовать одни и те же скрипты в разных местах, не переписывая их заново.
  • Подходит для бэкенда. Код JavaScript можно запускать и в браузере, и на сервере. Это значит, что на нём можно писать не только интерактивные элементы страниц, но и серверную часть сайта: функции обработки данных и вычислений. Правда, для этого нужно освоить отдельный инструмент — Node.js. Это движок, который позволяет запускать JavaScript не в браузере, а на сервере.
  • Универсальность — все популярные браузеры поддерживают JavaScript;

    ________________________________________

Буду благодарен за комментарии, если с чем то несогласны или заметили ошибки.
Продолжение следует ...