Некоторые любопытные факты о JavaScript

Хотя я уверенно знаю 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!');
}

Пример.

 

Заглавные буквы имеют более низкий числовой эквивалент по сравнению со строчными буквами.

Вероятно, вы нечасто будете использовать данную особенность, но знать о ней полезно, чтобы в случае необходимости быть во всеоружии!

 

Еще что-то?

Может быть вы знаете что-то еще интересное? Ваши мысли приветствуются — особенно, если все, что я сказал здесь — неправильно 🙂

 

Спасибо за внимание! Подписываемся на рассылку!

 

 

 

Автор статьи: Alex. Категория: JavaScript
Дата публикации: 31.05.2013