JavaScript: сила замыканий
JavaScript - это универсальный язык программирования, который допускает широкий спектр методов кодирования, включая одну из самых неправильно понимаемых функций из всех: замыкания.
Давайте рассмотрим некоторые из удивительных трюков, которые вы могли бы сделать с помощью ванильного JavaScript.
Знаете ли вы, что можно найти сведения об операционной системе с помощью простого JS?
Объект window.navigator содержит информацию о параметрах операционной системы браузера посетителя. Некоторые свойства операционной системы доступны в разделе "Свойства платформы".
Вы можете использовать приведенный ниже фрагмент для получения подробной информации.
console.log(navigator.platform);
Void(0) используется для предотвращения обновления страницы. Это будет полезно для устранения нежелательных эффектов, потому что оно вернет неопределенное примитивное значение.
Он обычно используется в HTML-документах, использующих элементы привязки.
Например, когда вы нажимаете на ссылку, браузер загружает новую страницу или обновляет ту же страницу. Этого не произойдет.
Например, ссылка ниже выдает предупреждение без перезагрузки страницы.
<a href="JavaScript:void(0);" onclick="alert('Well done!')">
Click Me!
</a>
В ванильном JavaScript вы можете перенаправить пользователя на новую страницу, установив href свойство location объекта, которое является свойством window объекта.
Синтаксис будет следующим:
function redirect() {
window.location.href = "newPage.html";
}
Когда вы вызываете функцию перенаправления, браузер переходит на newPage.html.
Небольшое дополнительное объяснение.
window: Относится к окну браузера.
location: Свойство объекта window, которое содержит информацию о текущем URL.
href: Свойство объекта location, содержащее полный URL-адрес. Используя это, вы можете изменить URL-адрес, в результате чего браузер загрузит новую страницу.
Всякий раз, когда я хочу подтвердить электронное письмо, я всегда ищу идеальный фрагмент.
Вы также наверняка видели функции по умолчанию в библиотеках для проверки электронной почты, например, в Zod.
Следующий фрагмент проверяет любое электронное письмо с полной логикой.
function validateEmail(email) {
var re =
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(String(email).toLowerCase());
}
Если вам нужен более простой JavaScript, который также принимает символы Unicode. Вы можете использовать приведенный ниже!
function validateEmailUnicode(email) {
var re =
/^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return re.test(String(email).toLowerCase());
}
Эта упрощенная версия соответствует большинству действительных адресов электронной почты, избегая при этом некоторых подводных камней, связанных с чрезмерно сложными регулярными выражениями.
Да, это возможно только с помощью JavaScript!
Вы можете использовать window.location.href как для получения текущего URL, так и для обновления URL.
console.log("location.href", window.location.href); // Returns full URL
Вы также можете использовать document.URL только для чтения (не может использоваться для перехода по новому URL), но в Firefox с этим решением проблемы.
console.log("document.URL", document.URL); // Returns full URL (Read-only)
Это может работать не во всех браузерах, особенно в старых версиях Firefox (онлайн-источники).
Итак, window.location.href обычно предпочтительнее как для чтения, так и для обновления URL.
Вы можете использовать регулярное выражение, которое возвращает значение true или false в зависимости от того, просматривает ли пользователь веб-страницы с мобильного устройства. ВАУ!
window.mobilecheck = function () {
var mobileCheck = false;
(function (a) {
if (
/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
a
) ||
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(
a.substr(0, 4)
)
)
mobileCheck = true;
})(navigator.userAgent || navigator.vendor || window.opera);
return mobileCheck;
};
Интересно, кто вообще написал этот фрагмент :)
Вы можете обнаруживать мобильные браузеры, просто пробежавшись по списку устройств и проверив, соответствует ли userAgent чему-либо. Это альтернативное решение для использования регулярных выражений.
function detectmob() {
if (
navigator.userAgent.match(/Android/i) ||
navigator.userAgent.match(/webOS/i) ||
navigator.userAgent.match(/iPhone/i) ||
navigator.userAgent.match(/iPad/i) ||
navigator.userAgent.match(/iPod/i) ||
navigator.userAgent.match(/BlackBerry/i) ||
navigator.userAgent.match(/Windows Phone/i)
) {
return true;
} else {
return false;
}
}
Это действительно выглядит намного чище и понятнее.
Обнаружение отключенного JavaScript на странице.
Вы можете использовать тег <noscript>, чтобы определить, отключен JavaScript или нет.
Блок кода внутри <noscript> выполняется, когда JavaScript отключен, и обычно используется для отображения альтернативного контента, когда страница генерируется на JavaScript.
<script type="javascript">
// JS related code goes here
</script>
<noscript>
<a href="next_page.html?noJS=true">JavaScript is disabled on the page. Enable it asap!</a>
</noscript>
Вы можете использовать import.meta object, который представляет собой мета-свойство, предоставляющее модулю JavaScript контекстно-зависимые метаданные.
Он содержит информацию о текущем модуле, такую как URL модуля. В браузерах вы можете получить другие метаданные, чем в NodeJS.
<script type="module" src="welcome-module.js"></script>;
console.log(import.meta); // { url: "file:///home/user/welcome-module.js" }
Вы можете использовать getTimezoneOffset метод объекта date . Этот метод возвращает разницу в часовых поясах в минутах от текущей локали (настройки хост-системы) до UTC.
var offset = new Date().getTimezoneOffset();
console.log(offset); // -330
Установка курсора в положение ожидания.
Курсор может быть установлен в положение ожидания в JavaScript с помощью свойства с именем cursor. Давайте выполним это с помощью приведенной ниже функции.
function myFunction() {
window.document.body.style.cursor = "wait";
}
Вы можете использовать это в тех случаях, когда страница загружается.
Вы можете применить свойство checked к выбранному флажку в DOM. Если значение равно true, это означает, что флажок установлен, в противном случае это означает, что он снят.
Например, приведенный ниже HTML-элемент checkbox можно проверить с помощью javascript, как показано ниже:
<input type="checkbox" id="checkboxname" value="Agree" /> Agree the
conditions<br />
console.log(document.getElementById(‘checkboxname’).checked); // true or false
Да, вы даже можете применять стили CSS к сообщениям консоли, аналогичным тексту HTML на веб-странице. Действительно потрясающе :)
console.log(
"%c The text has a purple color, with large font and white background",
"color: purple; font-size: x-large; background: white"
);
Примечание: К сообщениям консоли можно применять все стили CSS.
Отключите щелчок правой кнопкой мыши на веб-странице.
Щелчок правой кнопкой мыши на странице можно отключить, вернув значение false из oncontextmenu атрибута элемента body.
<body oncontextmenu="return false;"></body>
Сначала я даже не верил, что это возможно.
Вы можете сделать это с помощью beforeunload события, которое запускается, когда окно, документ и его ресурсы вот-вот будут выгружены. Это событие полезно для предупреждения пользователей о потере текущих данных и обнаружении события кнопки возврата.
window.addEventListener('beforeunload', () => {
console.log('Clicked browser back button');
});
console.group() Можно использовать для группировки связанных сообщений журнала, а также для console.groupEnd() закрытия группы.
Вы также можете объединять группы, что позволяет вам выводить сообщения иерархически.
Например, если вы регистрируете данные пользователя:
console.group("User Details");
console.log("name: Sudheer Jonna");
console.log("job: Software Developer");
// Nested Group
console.group("Address");
console.log("Street: Commonwealth");
console.log("City: Los Angeles");
console.log("State: California");
// Close nested group
console.groupEnd();
// Close outer group
console.groupEnd();
Вы также можете использовать console.groupCollapsed() вместо console.group(), если хотите, чтобы группы были свернуты по умолчанию.
Другие статьи по теме:
JavaScript - это универсальный язык программирования, который допускает широкий спектр методов кодирования, включая одну из самых неправильно понимаемых функций из всех: замыкания.
В этом посте дана справочная информация по некоторым методам и операторам языка Javascript.
Сценарии JavaScript блокируют загрузку файлов, следующих за ними. Но имеется несколько приемов, предотвращающих это…
Те из вас, кто верстает сайты, прекрасно знают, как удобно читать код, когда он свёрстан в удобочитаемом виде. Это упрощает и его понимание и визуальное выявление ошибок до запуска.
Регулярные выражения, вероятно, являются наиболее неправильно понимаемой особенностью большинства языков.
Многие разработчики пытаются понять их с помощью плохих руководств или старых книг, и когда они разочаровываются, они предпочитают игнорировать их до конца своей карьеры.
В этой статье мы рассмотрим операторы в JavaScript один за другим. Мы объясним их функции и продемонстрируем их использование, помогая вам понять их роль в построении более сложных выражений.