Найти в Дзене

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

Всем привет! Я начинаю серию обзора теоретических и практических вопросов которые часто задают на собеседованиях на вакансию JavaScript разработчика. Начну с простых и далее буду усложнять.
Итак, поехали! Типы данных JS ?Какие типы примитивные? Какие ссылочные? - "number", "string", "boolean", "null", "undefined", "bigint", "simbol", "object"; Стандарт ECMAScript определяет 8 типов данных, 7 типов являются примитивными потому что содержат только простые значения (будь то строка, или число, или что-то ещё), сохраняются непосредственно в переменной и ссылочный тип - это объекты, включая Object, Array и Function. Ввиду того что эти типы могут содержать очень большие объемы весьма разнородных данных, переменная, содержащая ссылочный тип, фактически его значения не содержит. Она содержит ссылку на место в памяти, где размещаются реальные данные. - "number" : число. Единый тип число используется как для целых, так и для дробных чисел. Существуют специальные числовые значения Infinity (бес
Оглавление

Всем привет! Я начинаю серию обзора теоретических и практических вопросов которые часто задают на собеседованиях на вакансию JavaScript разработчика. Начну с простых и далее буду усложнять.
Итак, поехали!

Типы данных JS ?Какие типы примитивные? Какие ссылочные?

- "number", "string", "boolean", "null", "undefined", "bigint", "simbol", "object";

Стандарт ECMAScript определяет 8 типов данных, 7 типов являются примитивными потому что содержат только простые значения (будь то строка, или число, или что-то ещё), сохраняются непосредственно в переменной и ссылочный тип - это объекты, включая Object, Array и Function. Ввиду того что эти типы могут содержать очень большие объемы весьма разнородных данных, переменная, содержащая ссылочный тип, фактически его значения не содержит. Она содержит ссылку на место в памяти, где размещаются реальные данные.

- "number" : число. Единый тип число используется как для целых, так и для дробных чисел. Существуют специальные числовые значения Infinity (бесконечность) и NaN (ошибка вычислений). Например, бесконечность Infinity получается при делении на ноль. Ошибка вычислений NaN будет результатом некорректной математической операции.

- "string" : строка;

- "boolean" : булевый(булев), логический тип, true или false ;

- "null" : В JavaScript null не является «ссылкой на несуществующий объект» или «нулевым указателем», как в некоторых других языках. Это просто специальное значение, которое имеет смысл «отсутствует», «ничего», «пусто» или «значение неизвестно», обозначает намеренное отсутствие, если проверить тип через оператор typeof === "object", так сложилось исторически. Обратите внимание, что в JavaScript null это значение, а не тип данных и это значение может содержаться в JSON, а undefined в JSON не бывает;

- "undefined" : занчение undefined как и null, образует свой собственный тип, состоящий из одного этого значения, неопределенный тип. Оно имеет смысл "значение не присвоено". Если переменная объявлена, но ей не присвоено никакого значения, то её значением будет undefined.;

- "bigint" : предназначен для представления очень больших целых чисел;
const bigInt = 1234567890123456789012345678901234567890n;

- "simbol" : символ, используется для создания уникальных идентификаторов в объектах. Создаются новые символы с помощью функции Symbol(). Символы гарантированно уникальны и не равны друг другу. Даже если мы создадим множество символов с одинаковым описанием, это всё равно будут разные символы. Описание – это просто метка, которая ни на что не влияет.

- "object" : представляет сложный, комплексный, ссылочный тип данных. Объекты используются для хранения коллекций различных значений и более сложных сущностей;

Чем отличается null от undefined?

Для начала давайте поговорим о том, что у них общего:

Во-первых, они принадлежат к 7 «примитивам» (примитивным типам) JS:

let primitiveTypes = ['string', 'number', 'null', 'undefined', 'boolean','symbol', 'bigint']

Во-вторых, они являются ложными значениями, т.е. результатом их преобразования в логическое значение с помощью Boolean() или оператора "!!" является false:

console.log(!!null) // false
console.log(!!undefined) // false
console.log(Boolean(null)) // false
console.log(Boolean(undefined)) // false

Теперь о различиях:

undefined («неопределенный») представляет собой значение по умолчанию:
- переменной, которой не было присвоено значения, т.е. объявленной, но не инициализированной переменной;
- функции, которая ничего не возвращает явно, например,
console.log(1);
- несуществующего свойства объекта.

В указанных случаях движок JS присваивает значение undefined.

let _thisIsUndefined;
const doNothing = () => {};
const someObj = {
a: 'ay',
b: 'bee',
c: 'si'
};

console.log(_thisIsUndefined) // undefined
console.log(doNothing()) // undefined
console.log(someObj['d']) // undefined

null — это «значение отсутствия значения», значение, которое присваивается переменной явно. В примере ниже мы получаем null, когда метод fs.readFile отрабатывает без ошибок:

fs.readFile('path/to/file', (e, data) => {
console.log(e) // здесь мы получаем null
if(e) {
console.log(e)
} console.log(data)
});

При сравнении null и undefined мы получаем true, когда используем оператор "==", и false при использовании оператора "===".

console.log(null == undefined) // true
console.log(null === undefined) // false

________________________________________

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