опасная штука.
— Чжуанцзы
На этой неделе я был впечатлен элементарными знаниями JavaScript и веб-разработки. Проблемы, с которыми я столкнулся, не были намеренно созданы для интервью, а просто некоторые реальные проблемы в моем повседневном процессе кодирования.
Примитивный тип VS. Тип ссылки
У меня буквально были проблемы с этим эталонным типом 3 раза за последнюю неделю. Первый раз это было при работе над 207. Расписание курсов". Второй раз был на работе, я хотел скопировать данные сеанса в объект и изменить его, и понял, что исходные данные сеанса также были изменены. Третий раз был сегодня, в «1146. Массив снимков.
Вот хорошая и короткая заметка об этом.
Как избежать проблемы?
Когда мы присваиваем значение одного объекта другому. Мы должны использовать JSON.parse(JSON.stringify(object));
или new Map(oldMap)
. Если это массив, мы можем сделать [].slice()
.
// Начать обновление 2019-08-05
Мой коллега указал, что `JSON.parse(JSON.stringify(object))
не годится, потому что он теряет функции. И если это функция get...
, мы можем получить значение вместо функции.
// Завершить обновление
"for...of"
vs. "for...in"
Каждые несколько недель мне приходится освежать в памяти for..of
и for...in
. Их так трудно запомнить.
Позвольте мне попробовать, если этот раз может быть последним.
in
зацикливает index/key и не должен быть итерируемым, что означает, что он работает как для массивов, так и для объектов.
of
зацикливает значение итерируемого объекта, поэтому он не работает для объектов.
Область действия JavaScript в HTML
Я никогда не задумывался, как JavaScript-прокрутка работает в HTML, но это видео подняло эту забавную тему…
Быстрый тест из видео
Что можно считать дочерним в DOM?
Когда я читал DOM Enlightenment 1.12, там был очень странный комментарий:
//записывает текст без комментариев, потому что есть разрыв строки
Я открыл живой код: http://jsfiddle.net/domenlightenment/Hvfhv, но не совсем понял причину, пока не поиграл с ней в браузере…
Итак, точно так же, как сказано в комментарии: «потому что есть разрыв строки». Сам разрыв строки считается дочерним, потому что узел комментария закрыт, и перед открытием закрывающего тега ul
между ними есть разрыв строки 😅
Веб-безопасность
Каждый год на работе мы проводим обучение по веб-безопасности, но я до сих пор не могу вспомнить, чему я научился. Так я нашел Краткое введение в веб-безопасность.
Принцип веб-безопасности заключается в следующем.
- Никто никогда не застрахован на 100%.
- Одного уровня защиты недостаточно.
Вот некоторые сокращения:
- Совместное использование ресурсов между источниками (CORS), которое может частично предотвратить подделку межсайтовых запросов (XSRF). Что, если вредоносный код изменит заголовок и притворится исходным ресурсом? На 7-й минуте в этом видео упоминалось, что мы можем использовать токен, чтобы убедиться, что запрос действительно из того же источника.
- Политика безопасности контента (CSP), которая может частично предотвратить одну из самых распространенных уязвимостей в Интернете: XSS (межсайтовый скриптинг). «content-security-policy» в заголовке содержит множество директив, указывающих браузеру, что загружать. Такие как «default-src», «script-src», «style-src», «connect-src».
- HTTPS — это HTTP + SSL/TLS.
- HTTP Strict-Transport-Security (HSTS) сообщает браузеру о перенаправлении на HTTPS.
У Udacity есть курс для объяснения XSS и XSRF, что хорошо, потому что в нем также есть несколько викторин.