Найти в Дзене

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

Всем привет! Я продолжаю серию обзора теоретических и практических вопросов которые часто задают на собеседованиях на вакансию JavaScript разработчика. Начну с простых и далее буду усложнять.
Итак, продолжаем! Какие типы являются мутабельными, а какие иммутабельные? Мутабельный тип данных - тип данных, позволяющий изменять свои свойства после создания, в JS ссылочные типы изменяемы (mutable) - объекты, массивы и функции.
Иммутабельный тип данных - тип данных, который не может быть изменен после создания. В JS примитивные типы неизменяемы (immutable). Приведение каких значений переменной к булевому типу даст false? Шпаргалка по “true” и “false” значениям в JavaScript Boolean(false); // false
Boolean(undefined); // false
Boolean(null); // false
Boolean(' '); // false
Boolean(NaN); // false
Boolean(0); // false
Boolean(-0); // false
Boolean(0n); // false
Boolean(true); // true
Boolean('hi');
Оглавление

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

Какие типы являются мутабельными, а какие иммутабельные?

Мутабельный тип данных - тип данных, позволяющий изменять свои свойства после создания, в JS ссылочные типы изменяемы (mutable) - объекты, массивы и функции.
Иммутабельный тип данных - тип данных, который не может быть изменен после создания. В JS примитивные типы неизменяемы (immutable).

Приведение каких значений переменной к булевому типу даст false?

Шпаргалка по “true” и “false” значениям в JavaScript

Falsy значение – значение, которое при приведении к логическому типу возвращает false.
Truthy значение – значение, которое при приведении к логическому типу возвращает true.
Falsy значение – значение, которое при приведении к логическому типу возвращает false. Truthy значение – значение, которое при приведении к логическому типу возвращает true.

Boolean(false); // false
Boolean(undefined); // false
Boolean(null); // false
Boolean(' '); // false
Boolean(NaN); // false
Boolean(0); // false
Boolean(-0); // false
Boolean(0n); // false
Boolean(true); // true

Boolean('hi'); // true
Boolean(1); // true
Boolean([]); // true
Boolean([0]); // true
Boolean([1]); // true
Boolean({}); // true
Boolean({ a: 1 }); // true


Для чего нужна директива use strict?

«use strict» — используется для того, чтоб перевести код в режим полного соответсвия современному стандарту.
Это директива ES5, которая заставляет весь наш код или код отдельной функции выполняться в строгом режиме.
Строгий режим вводит некоторые ограничения по написанию кода, тем самым позволяя избегать ошибок на ранних этапах.
Добавить выражение "use strict" в начало кода JavaScript, тогда strict mode будет применяться для всего кода, если добавить выражение "use strict" в начало тела функции, тогда strict mode будет применяться только для этой функции.
Вот какие ограничения накладывает строгий режим:
- нельзя присваивать значения или обращаться к необъявленным переменным:
function returnY() {
'use strict'
y = 123
return y
}

returnY() // Uncaught ReferenceError: y is not defined;

- запрещено присваивать значения глобальным переменным, доступным только для чтения или записи:
'use strict'
var NaN = NaN // Uncaught TypeError: Cannot assign to read only property 'NaN'
of object '#<Window>'
var undefined = undefined
var Infinity = 'and beyond';

- нельзя удалить «неудаляемое» свойство объекта:
'use strict'
const obj = {}Object.defineProperties(obj, 'x', {
value: 1
})
delete obj.x // Uncaught TypeError: Property description must be an object: x

- запрещено дублирование параметров:
'use strict'
function someFunc(a, b, b, c) {} // Uncaught SyntaxError: Duplicate parameter
name not allowed in this context

- нельзя создавать функции с помощью функции eval:
'use strict'
eval('var x = 1')
console.log(x) // Uncaught ReferenceError: x is not defined


- значением «this» по умолчанию является undefined:
'use strict'
function showMeThis() {
return this
}
showMeThis() // undefined;

-
определение глобальных переменных в функциях может вести к потенциальным ошибкам. Чтобы их избежать используется строгий режим или strict mode;
- используем, для исключения дублирования ключей в объекте, дублирования аргументов.
… и т.д.