Как и любые другие приложения, приложения на JavaScript также должны быть хорошо написаны.

В противном случае позже мы столкнемся с самыми разными проблемами.

В этой статье мы рассмотрим несколько советов, которым следует следовать, чтобы писать код JavaScript быстрее и лучше.

Извлечение меток времени UNIX в JavaScript

Мы можем получить временную метку UNIX экземпляра Date с помощью оператора +.

Например, мы можем написать:

+new Date(2020, 0, 1)

Тогда получаем 1577865600000.

Кроме того, мы можем использовать метод getTime, чтобы сделать то же самое:

new Date(2020, 0, 1).getTime()

Затем мы получаем то же самое.

Дата также может быть проанализирована, если она указана в формате ГГГГ-ММ-ДД.

Итак, мы можем написать:

new Date('2020-01-01').getTime()

И мы тоже получаем то же самое.

Отметка времени указывается в миллисекундах с 1 января 1970 г., 12:00 по всемирному координированному времени.

Таким образом, мы можем разделить возвращаемое число на 1000, чтобы преобразовать его в секунды.

Объединение значений массива в одно

Мы можем использовать метод reduce, чтобы свести элементы массива к одному результату.

Например, если у нас есть:

const cart = [{price: 10}, {price: 40}, {price: 20}];

Тогда мы можем получить общую цену от cart, написав:

const reducer = (total, item) => total + item.price;const total = cart.reduce(reducer, 0);

Тогда total равно 70, поскольку мы объединили все свойства cart записей price, сложив их значения вместе.

Определить, готов ли документ

Мы можем определить, полностью ли загружена страница, с помощью свойства document.readyState.

Например, мы можем написать:

if (document.readyState === 'complete') {
  //...
}

чтобы определить, полностью ли загружена страница, а затем что-нибудь сделать.

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

let stateCheck = setInterval(() => {
  if (document.readyState === 'complete') {
    clearInterval(stateCheck);
    // document ready
  }
}, 100);

Затем мы можем проверять состояние загрузки страницы каждые 100 миллисекунд, пока она не будет готова.

В блоке if мы вызываем clearInterval, чтобы завершить таймер, чтобы мы перестали проверять readyState.

Кроме того, мы можем прослушивать событие readystatechange с помощью:

document.onreadystatechange = () => {
  if (document.readyState === 'complete') {
    // document ready
  }
}

Это лучше, чем создавать таймер и запускать его до тех пор, пока состояние готовности не изменится.

Вычислить максимальное или минимальное значение массива

Мы можем передать столько значений в методы Math.max или Math.min, чтобы проверить максимальное или минимальное значение массива.

Например, мы можем написать:

const max = Math.max(1, 2, 3);

чтобы вернуть максимальное значение или:

const min = Math.min(1, 2, 3);

чтобы вернуть минимальное значение.

Чтобы передать массив, мы можем использовать оператор распространения:

const max = Math.max(...[1, 2, 3]);

or:

const min = Math.min(...[1, 2, 3]);

Или мы можем использовать apply следующим образом:

const max = Math.max.apply(undefined, [1, 2, 3]);

or:

const min = Math.min.apply(undefined, [1, 2, 3]);

apply принимает значение this в качестве первого аргумента, который равен undefined, поскольку Math.max и Math.min являются статическими методами.

Второй аргумент - это массив аргументов, которые мы хотим передать в качестве аргументов в массив.

Деструктуризация функциональных параметров

Мы можем деструктурировать параметры объекта с помощью синтаксиса деструктуризации.

Например, мы можем написать:

const greet = ({ name, lastName }) => {
  console.log(`hi, ${name} ${lastName}`);
};

Мы получаем свойства объекта name и lastName с назначениями деструктуризации.

Затем мы можем вызвать его, позвонив:

greet({ name: 'jane', lastName: 'doe' })

Мы также можем установить значение по умолчанию для деструктурированных переменных.

Например, мы можем написать:

const greet = ({ name = 'jane', lastName = 'smith' }) => {
  console.log(`hi, ${name} ${lastName}`);
};

Затем, когда мы вызываем это, написав:

greet({})

Тогда name равно 'jane', а lastName равно 'smith', поскольку мы не устанавливали значения ни для одного свойства.

Предотвращение изменения встроенных прототипов

Мы можем вызвать Object.freeze, чтобы предотвратить изменение объектов, в том числе встроенных прототипов.

Итак, мы можем написать:

Object.freeze(Object.prototype);
Object.freeze(Array.prototype);
Object.freeze(Function.prototype);

чтобы предотвратить изменение каких-либо встроенных прототипов.

Заключение

Мы можем предотвратить изменение встроенных прототипов с помощью Object.freeze.

Кроме того, мы можем использовать оператор распространения или apply для вызова функции с массивом аргументов.

Есть также различные способы получить временную метку UNIX.

JavaScript на простом английском языке

Вы знали, что у нас четыре публикации и канал на YouTube? Найдите их все на plainenglish.io и подпишитесь на Decoded, наш канал YouTube!