Создавать свои сниппеты просто и приятно и они улучшают девелопер экспириенс в миллион раз ✨
Документация лежит тут: https://code.visualstudio.com/docs/editor/userdefinedsnippets
А вот удобнейший сниппет-генератор: https://snippet-generator.app
Документация лежит тут: https://code.visualstudio.com/docs/editor/userdefinedsnippets
А вот удобнейший сниппет-генератор: https://snippet-generator.app
Visualstudio
Snippets in Visual Studio Code
It is easy to add code snippets to Visual Studio Code both for your own use or to share with others on the public Extension Marketplace. TextMate .tmSnippets files are supported.
Между прочим отличный доклад Ивана Акулова о простых способах оптимизировать перформанс в 2019
https://youtu.be/iEv1rFujYm4
https://youtu.be/iEv1rFujYm4
YouTube
Быстрые приложения в 2019 / Иван Акулов (PerfPerfPerf )
Приглашаем на FrontendConf 2024, которая пройдет 30 сентября и 1 октября 2024 в Москве.
Программа, подробности и билеты по ссылке: https://frontendconf.ru/moscow/2024
________
РИТ++ 2019
Frontend Conf
Тезисы и презентация:
http://frontendconf.ru/moscow…
Программа, подробности и билеты по ссылке: https://frontendconf.ru/moscow/2024
________
РИТ++ 2019
Frontend Conf
Тезисы и презентация:
http://frontendconf.ru/moscow…
Статья (с примерами кода) о том, как пара строчек css помогают докручивать элементы до края экрана
https://css-tricks.com/practical-css-scroll-snapping/
https://css-tricks.com/practical-css-scroll-snapping/
CSS-Tricks
Practical CSS Scroll Snapping | CSS-Tricks
CSS scroll snapping allows you to lock the viewport to certain elements or locations after a user has finished scrolling. It’s great for building interactions
Forwarded from Про
const getString = (len = 4) => {
const arr = ['#']
for (i = 0; i < len; i++) {
if (arr[i - 1] === '#') {
arr.push(' ')
} else if (arr[i - 1] === ' ') {
arr.push('#')
}
}
arr.push('\n')
return arr.join('')
}
const getDesk = (width = 8, height = 8) => {
const str = getString(width)
const arr = []
for (i = 0; i < height; i++) {
if (i % 2 === 0) {
arr.push(str + ' ')
} else {
arr.push(str)
}
}
return arr.join('')
}
console.log(getDesk())Предположим, что мы хотим использовать самую простую регулярку для поиска подстроки «кот» в строке «который раз одно и то же».
Вот она:
Флаг
Звучит как что-то полезное.
Но если мы запустим это выражение на нашей строке, то каждый второй раз оно будет возвращать
При первом вызове test() совпадение обнаруживается, но в следующей итерации поиск начинается с индекса 3 (конец первого совпадения) (wtf) и завершается ничем. После достижения конца строки и перехода к следующей итерации метод test() снова начинает поиск с начала строки.
Проверить это можно через свойство
Избежать этого можно несколькими способами:
- не указывать флаг
- присваивать 0 свойству lastIndex после каждого вызова
- каждый раз перед проверкой создавать новую регулярку
Вот она:
const reg = /кот/g
Флаг
g (global) означает, что регулярка применяется ко всей строке, то есть поиск не прекращается после обнаружения первого совпадения.Звучит как что-то полезное.
Но если мы запустим это выражение на нашей строке, то каждый второй раз оно будет возвращать
false.const str = "который раз одно и то же"
reg.test(str)
true
reg.test(str)
false
reg.test(str)
true
reg.test(str)
false
При первом вызове test() совпадение обнаруживается, но в следующей итерации поиск начинается с индекса 3 (конец первого совпадения) (wtf) и завершается ничем. После достижения конца строки и перехода к следующей итерации метод test() снова начинает поиск с начала строки.
Проверить это можно через свойство
lastIndex reg.lastIndex
0
// мы еще не запустили проверку и lastIndex равен нулю
reg.test(str)
true
reg.lastIndex
3
// вот здесь-то и начинаются непонятки
Избежать этого можно несколькими способами:
- не указывать флаг
g- присваивать 0 свойству lastIndex после каждого вызова
reg.lastIndex = 0- каждый раз перед проверкой создавать новую регулярку
https://www.youtube.com/watch?v=IHPjaECmtCo&feature=youtu.be&t=953
доклад, после которого я установила
доклад, после которого я установила
tldr в консоль и сделала бесполезного ботаtldr — полезная штука, которая прямо в консоли показывает, для чего используется та или иная комадаnpm install -g tldrпостоянно путаю
function declaration и function expression
function declarationfunction sayHi() { }
function expressionconst sayHi = function() { }
в чём же разница:declaration всплывает, expression не всплываеткак дэн абрамов из студента бонча с дутым макбуком стал самым популярным прогромистом в твиттере. люблю такие истории
https://overreacted.io/my-decade-in-review/
https://overreacted.io/my-decade-in-review/
overreacted.io
My Decade in Review — overreacted
A personal reflection.
читаемость важнее краткости (насчет стрелочных функций не соглашусь)
https://gomakethings.com/readability-is-more-important-than-brevity/
https://gomakethings.com/readability-is-more-important-than-brevity/
Gomakethings
Readability is more important than brevity
Often, web developers are obsessed with brevity. There’s this thing were developers will try to write the same function in the fewest number of characters possible.
Personally, I think brevity is pointless. Readability is a lot more important.
A competent…
Personally, I think brevity is pointless. Readability is a lot more important.
A competent…
cssчтобы зеркально отразить объект, можно использовать
transform: scaleX(-1);