Хотя я уверенно знаю HTML и CSS, я не могу тоже самое сказать о знаниях JavaScript. Я всегда ищу что-нибудь новенькое или вспоминаю, что учил несколько лет назад и уже забыл.
Далее я приведу несколько интересных моментов, которые я недавно читал или учил, которые могут быть вам полезны.
Функции с необязательными аргументами
Вы когда-нибудь делали следующее:
alert("hello world!");
Невероятно, это сложные вещи, да? Как вы, наверное, знаете, функция alert() встроена в язык JavaScript. Вы передаете один аргумент в функцию alert() и браузер выдает всплывающее сообщение пользователю на экране.
Но, что произойдет, если вы делаете так:
alert("hello world!", "How you doin'?");
Вы можете предположить два варианта развития событий: (1) будут показаны два последовательных alert() сообщения с каждым из параметров или (2) возникнет ошибка. Но ответ другой! Результат будет такой же, как в первом примере, т.е. будет выведено сообщение «hello world» и все.
Причиной всего этого является то, что в JavaScript функции могут принимать неограниченное количество аргументов — даже, если определенная функция принимает 1 или 2 параметра (как в случае с функцией alert(), у которой только 1 параметр).
Итак, что это означает? В этом есть свои плюсы и минусы. Если кто-то ошибочно добавит дополнительные аргументы в функцию, которая работает только с конкретным количеством аргументов, то, вероятно, этот кто-то будет ломать голову, почему аргументы не обрабатываются, так как никаких оповещений об ошибке не будет.
Плюсом здесь является то, что это позволяет писать функции, которые принимают необязательные параметры и затем писать код, который работает с ними. С этим сталкиваешься постоянно, когда работаешь с JQuery. Данная особенность позволяет сделать функции более гибкими.
Переопределение встроенных объектов
Теперь узнаем еще одну, возможно, полезную вещь. Попробуем сделать так:
function alert(myvalue) { document.write(myvalue); } alert('hello world');
В этом примере мы переопределили функцию alert(), которая выводила диалоговое окно. Теперь функция alert() печатает сообщение на странице. Это так же означает, что вы можете переопределить другие функции и значения, например, свойство undefined.
Попробуйте использовать этот пример в старых браузерах, например, в IE8:
var undefined = 'hahaha'; var myvar; if (myvar === undefined) { alert('it is undefined'); } else { alert('it is defined'); }
Хотя переменная myvar еще не определена, когда мы проверяем ее на эквивалентность с «undefined», всплывающее сообщение скажет нам, что переменная myvar — «it is defined». Это произошло, так как мы в первой строке переопределили «undefined».
Обновление: Как я узнал позже, переопределить свойства, такие как «undefined» больше невозможно в ECMAScript 5 совместимых браузеров. Но это работает в таком старом браузере, как IE8.
Сравнение строк, как чисел
Вы, вероятно, делали цифровые сравнения с использованием операторов больше или меньше («>» и «<«). Если вы хотите сравнить 2 строки вы можете сделать так:
if ('baseball' > 'football') { alert('baseball rules!'); } else { alert('football rules!'); }
Обратите внимание, что я проверяю больше ли строка «baseball», чем строка «football». К сожалению, JavaScript ничего не знает о спорте. В нашем случае результатом будет предупреждающее сообщение «football rules!». Пример.
Так как же браузер вычислил, какая строка больше? Ну, он просто присваивает числовое значение каждой букве, а затем сравнивает каждую цифру слева направо (не число, как целое). Чтобы baseball был больше, чем football нам нужно конвертировать первый символ в строке «football» в верхний регистр, как показано ниже:
if ('baseball' > 'Football') { alert('baseball rules!'); } else { alert('football rules!'); }
Заглавные буквы имеют более низкий числовой эквивалент по сравнению со строчными буквами.
Вероятно, вы нечасто будете использовать данную особенность, но знать о ней полезно, чтобы в случае необходимости быть во всеоружии!
Еще что-то?
Может быть вы знаете что-то еще интересное? Ваши мысли приветствуются — особенно, если все, что я сказал здесь — неправильно 🙂
Спасибо за внимание! Подписываемся на рассылку!