Массив и Boolean
Иногда нам нужно отфильтровать массив не по его первоначальному значению, а по новому значению, поэтому мы используем map:
Иногда нам нужно отфильтровать массив не по его первоначальному значению, а по новому значению, поэтому мы используем map:
myArray.map(item => {
// Делаем обработку ...
// Если нам всё равно на item, мы возвращаем false или null, или undefined
return false;
});
#функцииКак создать пустой объект
Если в Object.create использовать
Можно создать объект, который кажется пустым с помощью
#полезно
Если в Object.create использовать
null
в качестве единственного аргумента, то создастся совершенно чистый объект.Object.create
является отличной утилитой для создания прототипов. Объекты, созданные с помощью Object.create
, имеют proto
и наследуют свойства объекта, которыми можно манипулировать. Что если мы хотим создать объект который не был подвержен манипуляциям извне? Мы можем сделать это с Object.create(null)
:Можно создать объект, который кажется пустым с помощью
{}
, но этот объект всё ещё имеет proto,
hasOwnProperty
и другие методы объекта. Однако, есть способ создать чистый объект:const dict = Object.create(null);На этом объекте нет абсолютно никаких ключей или методов, которые мы туда не поместим. Поскольку прототипа не существует, объектом нельзя манипулировать извне.
console.log(dict.proto === undefined); // true
console.log(dict); // {} No properties
// Свойства объекта не существуют, пока мы не добавим их
#полезно
👍6
Объединение объектов
Необходимость объединения нескольких объектов в JavaScript существовала всегда, особенно когда мы начали создавать классы и виджеты с параметрами:
Также мы можем использовать
#полезно
Необходимость объединения нескольких объектов в JavaScript существовала всегда, особенно когда мы начали создавать классы и виджеты с параметрами:
const person = { name: "Alex", gender: "Male" };Таким образом создается новый объект, содержащий все свойства и значения объектов, предоставленных оператором
const tools = { computer: "Mac", editor: "VSCode" };
const attributes = { handsomeness: "Extreme", hair: "Brown", eyes: "Green" };
const summary = { ...person, ...tools, ...attributes };
console.log(summary);
// { computer: "Mac", editor: "VSCode", eyes: "Green", gender: "Male", hair: "Brown", handsomeness: "Extreme", name: "Alex" }
spread
. Мы можем предоставить любое количество объектов для слияния.Также мы можем использовать
Object.assign
для выполнения того же, но оператор распространения spread
делает это немного короче.#полезно
👍4
Параметры функций
Возможность устанавливать значения по умолчанию для аргументов функции была отличным дополнением к JavaScript; но мы также можем “кидать” ошибки, когда данный параметр не передан функции:
Возможность устанавливать значения по умолчанию для аргументов функции была отличным дополнением к JavaScript; но мы также можем “кидать” ошибки, когда данный параметр не передан функции:
const isRequired = () => {
throw new Error("param is required");
};
const hello = (name = isRequired()) => {
console.log(hello ${name});
};
// этот вызов выдаст ошибку, потому что имя не указано
hello();
// этот вызов также выдаст ошибку
hello(undefined);
// эти вызовы сработают
hello(null); // hello null
hello("Alexey"); // hello Alexey
#функции👍5❤1🔥1
Адаптивная вёрстка: что это и как использовать
В этой статье будут рассмотрены основные элементы сайта и способы их адаптации.
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
В этой статье будут рассмотрены основные элементы сайта и способы их адаптации.
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
❤7👍1🔥1
Деструктуризация псевдонимов
Деструктуризация - это очень приятное дополнение к JavaScript, потому что иногда мы предпочитаем ссылаться на свойства под другим именем, поэтому мы можем использовать псевдонимы:
Деструктуризация - это очень приятное дополнение к JavaScript, потому что иногда мы предпочитаем ссылаться на свойства под другим именем, поэтому мы можем использовать псевдонимы:
const person = { fullName: "Alexey" };
// Берём person.fullName как { fullName }
const { fullName } = person;
console.log(fullName); // Alexey
// Берём person.fullName как { name }
const { fullName: name } = person;
console.log(name); // Alexey
#полезно👍10🔥4❤2
null - это объект
null
является объектом. Сомневаетесь? Ведь данное утверждение противоречит самой сути null. Вот доказательства:alert(typeof null); //Выдаст сообщение 'object'Несмотря на очевидный факт,
null
не является реализацией никакого базового объекта. (Значения в JavaScript являются реализациями базового объекта. Так, каждое число является реализацией объекта Number, каждый объект является реализацией объекта Object.) Такое положение возвращает нас обратно к практическому смыслу, потому что если null является отсутствием значения, то он не может быть реализацией какого-либо объекта. Следовательно следующее выражение возвращает false
:alert(null instanceof Object); //Выдаст сообщение 'false'#полезно
👍12
NaN - это число
Считаете факт представления null объектом странным? Попробуйте проверить NaN! Он оказывается числом! Кроме того, NaN не равен самому себе!
#полезно
Считаете факт представления null объектом странным? Попробуйте проверить NaN! Он оказывается числом! Кроме того, NaN не равен самому себе!
alert(typeof NaN); //Выдаст сообщение 'Number'В действительности NaN не равен ничему. Единственный способ проверить значение NaN - функция
alert(NaN === NaN); //Выдаст сообщение 'false'
isNaN()
.#полезно
👍5
10 игр для изучения JavaScript
В этой статье вы найдете десятку интересных игр для изучения JavaScript. Попробуйте их, ведь учиться, играя, куда легче!
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
В этой статье вы найдете десятку интересных игр для изучения JavaScript. Попробуйте их, ведь учиться, играя, куда легче!
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
❤11👍1🔥1
replace() может получать возвратную функцию
Это один из самых скрытых секретов JavaScript (который появился начиная с версии 1.3). Обычно вызов функции
#функции
Это один из самых скрытых секретов JavaScript (который появился начиная с версии 1.3). Обычно вызов функции
replace()
выглядит примерно так:alert('10 13 21 48 52'.replace(/d+/g, '')); //заменяем все числа на *Простая замена. Но что если нужно более сложно контролировать когда и как будет производиться замена? Например, нужно заменять числа только до 30. Такая задача не может быть решена только регулярным выражением (оно может сделать все, что угодно со строкой, но не с математикой выражения). Нужно использовать возвратную функцию для вычисления соответствия.
alert('10 13 21 48 52'.replace(/d+/g, function(match) {Для каждой проверки JavaScript вызывает функцию, передавая ей аргументы для проверки. А затем мы возвращаем либо звездочку, либо само число.
return parseInt(match) < 30 ? '' : match;
}));
#функции
👍8❤3
JavaScript редактор SVG диаграмм
DgrmJS — это библиотека JavaScript для создания блок-схем SVG. Основная цель библиотеки — настроить рабочие процессы в системах BPM (Business Process Management). Подробней об этой библиотеке узнаешь из статьи.
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
DgrmJS — это библиотека JavaScript для создания блок-схем SVG. Основная цель библиотеки — настроить рабочие процессы в системах BPM (Business Process Management). Подробней об этой библиотеке узнаешь из статьи.
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
❤6🔥1
Регулярные выражения: больше, чем выделение подстроки и замена
Обратите внимание на то, что с помощью объекта RegExp вы можете создавать динамические регулярные выражения. В основном регулярные выражения составляются с использованием коротких форм (то есть строк, заключенных в прямые слеши) и в них нельзя использовать переменные. Но RegExp()позволяет обойти ограничение.
Так как RegExp определяется строкой, а не через синтаксис с обратными слешами, то мы можем использовать переменные для построения шаблона.
#полезно
Обратите внимание на то, что с помощью объекта RegExp вы можете создавать динамические регулярные выражения. В основном регулярные выражения составляются с использованием коротких форм (то есть строк, заключенных в прямые слеши) и в них нельзя использовать переменные. Но RegExp()позволяет обойти ограничение.
function findWord(word, string) {Здесь мы создаем динамический шаблон на основе значения аргумента word. Функция возвращает количество совпадений полного слова word (то есть не являющегося частью других слов) в строке. В нашем примере car встречается один раз, а слова Carl и card игнорируются.
var instancesOfWord = string.match(new RegExp('\b' + word + '\b', 'ig'))
alert(instancesOfWord)
}
findWord('car', 'Carl went to buy a car but had forgotten his credit card.')
Так как RegExp определяется строкой, а не через синтаксис с обратными слешами, то мы можем использовать переменные для построения шаблона.
#полезно
👍1🔥1
Использование GPT-3 для объяснения работы кода
Языковая модель ИИ GPT-3 способна генерировать объяснение того, как работает код. Она поразительно эффективна в этом: ее обучающий набор включает огромное количество исходного кода. Делимся статьей, где автор демонстрирует работу GPT-3.
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
Языковая модель ИИ GPT-3 способна генерировать объяснение того, как работает код. Она поразительно эффективна в этом: ее обучающий набор включает огромное количество исходного кода. Делимся статьей, где автор демонстрирует работу GPT-3.
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
👍2
Вы можете обманывать область видимости
Мы можем заставить нашу функцию считать, что она выполняется в другой области видимости, которая отличается от ее нормального состояния. Для этого используется встроенный метод call() для вызова функции:
#методы
Мы можем заставить нашу функцию считать, что она выполняется в другой области видимости, которая отличается от ее нормального состояния. Для этого используется встроенный метод call() для вызова функции:
var animal = 'dog';Здесь функция выполняется не в window, а в
function getAnimal(adjective) { alert(adjective+' '+this.animal); };
var myObj = {animal: 'camel'};
getAnimal.call(myObj, 'lovely'); //Выдаст сообщение 'lovely camel'
myObj
, что определяется первым аргументом при вызове метода call
. По существу метод call()
имитирует ситуацию, что наша функция является методом myObj
. Обратите внимание, что все переданные аргументы после первого в метод call()
передаются в нашу функцию - здесь lovely
становится значением аргумента adjective
.#методы
👍3🔥1
10 типичных ошибок в коде на JavaScript
Делимся статьей, где автор рассказывает про типичные ошибки в коде. К ним относятся: использование “=” вместо “==”; неверное форматирование вывода; неточная работа с дробными числами; ненумерованные индексы в массиве.
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
Делимся статьей, где автор рассказывает про типичные ошибки в коде. К ним относятся: использование “=” вместо “==”; неверное форматирование вывода; неточная работа с дробными числами; ненумерованные индексы в массиве.
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
👍2
Firefox читает и возвращает значение цвета в формате RGB, а не hex
Непонятно, почему Mozilla так делает. Определенно, из JavaScript удобнее работать с форматом hex, а не RGB. Например:
Обратите внимание, что в данном случае мы говорим о вычисляемом цвете, а не о том, как он определяется для элемента. Также IE имеет отличный метод для вычисления стилей.
Метод jQuery css() возвращает значение, определяемое в стиле для элемента. Поэтому, для действительного значения нужно использовать getComputedStyle и currentStyle.
#полезно
Непонятно, почему Mozilla так делает. Определенно, из JavaScript удобнее работать с форматом hex, а не RGB. Например:
<!--Большинство браузеров выведут ff9900, а Firefox - rgb(255, 153, 0). Нужно использовать функцию JavaScript для конвертации RGB в hex.
#somePara { color: #f90; }
-->
Текст
<script>
var ie = navigator.appVersion.indexOf('MSIE') != -1;
var p = document.getElementById('somePara');
alert(ie ? p.currentStyle.color : getComputedStyle(p, null).color);
</script>
Обратите внимание, что в данном случае мы говорим о вычисляемом цвете, а не о том, как он определяется для элемента. Также IE имеет отличный метод для вычисления стилей.
Метод jQuery css() возвращает значение, определяемое в стиле для элемента. Поэтому, для действительного значения нужно использовать getComputedStyle и currentStyle.
#полезно
👍3
Лайфхаки для улучшения кода
Делимся статьей, где автор демонстрирует полезные лайфхаки для улучшения кода. К ним относятся опциональны цепочки, оператор нулевого слияния, динамический импорт и другие.
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
Делимся статьей, где автор демонстрирует полезные лайфхаки для улучшения кода. К ним относятся опциональны цепочки, оператор нулевого слияния, динамический импорт и другие.
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
❤3👍1🔥1
9. 0.1 + 0.2 !== 0.3
Это действие точности вычислений. Когда JavaScript производит вычисления, он конвертирует значения в бинарные эквиваленты. И здесь появляется проблема, так как 0.1 не может быть совершенно точно представлено в бинарном эквиваленте, который используется для бинарных операций с плавающей точкой.
Для того чтобы преодолеть данный казус есть два метода (выбор за вами):
• Конвертирование значений в целые, вычисления, а затем обратная конвертация к десятичным дробям.
• Построение логики так, чтобы работать с диапазоном чисел, а не точным значением.
Например, вместо такого кода:
#полезно
Это действие точности вычислений. Когда JavaScript производит вычисления, он конвертирует значения в бинарные эквиваленты. И здесь появляется проблема, так как 0.1 не может быть совершенно точно представлено в бинарном эквиваленте, который используется для бинарных операций с плавающей точкой.
Для того чтобы преодолеть данный казус есть два метода (выбор за вами):
• Конвертирование значений в целые, вычисления, а затем обратная конвертация к десятичным дробям.
• Построение логики так, чтобы работать с диапазоном чисел, а не точным значением.
Например, вместо такого кода:
var num1 = 0.1, num2 = 0.2, shouldEqual = 0.3;Можно построить выражение так:
alert(num1 + num2 == shouldEqual); //Выдаст сообщение 'false'
alert(num1 + num2 > shouldEqual - 0.001 && num1 + num2 < shouldEqual + 0.001); //Выдаст сообщение 'true'В данном примере результат сложения 0.1 + 0.2 оценивается как попадание в диапазон чисел около 0.3 с точностью 0.001.
#полезно
👍6
Быстрая сортировка
QuickSort — это алгоритм «разделяй и властвуй». Он выбирает элемент в качестве опорного элемента и разбивает заданный массив вокруг выбранного опорного элемента. Существует много разных версий quickSort, которые по-разному выбирают точку опоры. Данная статья поможет разобраться с алгоритмом.
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
QuickSort — это алгоритм «разделяй и властвуй». Он выбирает элемент в качестве опорного элемента и разбивает заданный массив вокруг выбранного опорного элемента. Существует много разных версий quickSort, которые по-разному выбирают точку опоры. Данная статья поможет разобраться с алгоритмом.
#статья
❤️ Прожимай реакции, если нравится такой формат
👉 Читать статью
👍3❤1🔥1
Undefined может быть Defined
Звучит, конечно, странно, но undefined не является зарезервированным словом в JavaScript, хотя и имеет специальное значение для выявления неопределенных переменных:
Звучит, конечно, странно, но undefined не является зарезервированным словом в JavaScript, хотя и имеет специальное значение для выявления неопределенных переменных:
var someVar;На первый взгляд все отлично. Но:
alert(someVar == undefined); //Выдаст сообщение 'true'
undefined = "Я имею значение!";#полезно
var someVar;
alert(someVar == undefined); //Выдаст сообщение 'false'!
👍10🔥2❤1