#js_note
Object.getOwnPropertyDescriptor()
Метод
Этот метод позволяет просмотреть точное описание свойства. Свойство в JavaScript состоит из строкового имени и дескриптора свойства.
Дескриптор свойства — это запись с некоторыми из следующих атрибутов:
Object.getOwnPropertyDescriptor()
Метод
Object.getOwnPropertyDescriptor()
возвращает дескриптор свойства для собственного свойства (то есть такого, которое находится непосредственно в объекте, а не получено через цепочку прототипов) переданного объекта.Этот метод позволяет просмотреть точное описание свойства. Свойство в JavaScript состоит из строкового имени и дескриптора свойства.
Дескриптор свойства — это запись с некоторыми из следующих атрибутов:
value
- Значение, ассоциированное со свойством.writable
- Значение true
, если значение, ассоциированное со свойством, может быть изменено, иначе false
.get
- Функция, возвращающая значение свойства, либо undefined
, если такая функция отсутствует.set
- Функция, изменяющая значение свойства, либо undefined
, если такая функция отсутствует.configurable
- Значение true
, если тип дескриптора этого свойства может быть изменён и если свойство может быть удалено из содержащего его объекта, иначе false
.enumerable
- Значение true
, если это свойство доступно при перечислении свойств содержащего его объекта, иначе false
.#js_note
Разница между императивным и декларативным стилем программирования
Императивный стиль
Чтобы лучше понять разницу между императивным и декларативным стилей, давайте напишем небольшую функцию для нахождения всех нечётных элементов в массиве. Сперва сделаем это императивно:
То есть наша императивная функция — это набор конкретных команд, которые выполняются последовательно одна за другой.
Декларативный стиль
Теперь попробуем ту же функцию написать декларативно, то есть не вдаваясь в детали:
Мы говорим, что нам надо отфильтровать массив по указанному критерию. При этом нам не важно, как будет осуществлена эта фильтрация. Нам даже не важно, кто этим будет заниматься — нам лишь важно, какой массив на выходе мы хотим получить.
Разница между этими подходами — в деталях реализации. В первом случае детали описываем мы сами, во втором они от нас скрыты.
Разница между императивным и декларативным стилем программирования
Императивный стиль
Чтобы лучше понять разницу между императивным и декларативным стилей, давайте напишем небольшую функцию для нахождения всех нечётных элементов в массиве. Сперва сделаем это императивно:
function onlyOdd(array) {
let result = []
for (const element of array) {
if (element % 2 !== 0) {
result.push(element)
}
}
return result
}
То есть наша императивная функция — это набор конкретных команд, которые выполняются последовательно одна за другой.
Декларативный стиль
Теперь попробуем ту же функцию написать декларативно, то есть не вдаваясь в детали:
function onlyOdd(array) {
return array.filter((element) => element % 2 !== 0)
}
Мы говорим, что нам надо отфильтровать массив по указанному критерию. При этом нам не важно, как будет осуществлена эта фильтрация. Нам даже не важно, кто этим будет заниматься — нам лишь важно, какой массив на выходе мы хотим получить.
Разница между этими подходами — в деталях реализации. В первом случае детали описываем мы сами, во втором они от нас скрыты.
#js_note
Оператор нулевого слияния
Оператор нулевого слияния (
В отличие от логического
Использование оператора нулевого слияния
В этом примере показано как устанавливать значения по умолчанию, оставив в покое значения отличные от
Оператор нулевого слияния
Оператор нулевого слияния (
??
) это логический оператор, который возвращает значение правого операнда когда значение левого операнда равно null
или undefined
, в противном случае будет возвращено значение левого операнда.В отличие от логического
ИЛИ
(||
), левая часть оператора вычисляется и возвращается даже если его результат после приведения к логическому типу оказывается ложным
, но не является null
или undefined
. Другими словами, если вы используете ||
чтобы установить значение по умолчанию, вы можете столкнуться с неожиданным поведением если считаете некоторые ложные значения пригодными для использования (например, ""
или 0
). Ниже приведены примеры.Использование оператора нулевого слияния
В этом примере показано как устанавливать значения по умолчанию, оставив в покое значения отличные от
null
или undefined
.#js_note
Object.prototype.valueOf()
Метод
JavaScript вызывает метод
По умолчанию, метод
Object.prototype.valueOf()
Метод
valueOf()
возвращает примитивное значение указанного объекта.JavaScript вызывает метод
valueOf
для преобразования объекта в примитивное значение. Вам редко потребуется вызывать метод valueOf
самостоятельно; JavaScript автоматически вызывает его при обнаружении объекта, когда ожидается примитивное значение.По умолчанию, метод
valueOf
наследуется каждым объектом, произошедшим от Object
. Каждый встроенный объект ядра переопределяет этот метод, возвращая подходящее значение. Если объект не имеет примитивного значения, valueOf
возвращает сам объект, который отображается как: [object Object]
.