Курсы JavaScript

Урок 2. Типы данных, приведение типов, функции
- Курс 1-1
- Урок 1. Введение
- Урок 2. Типы данных, приведение типов, функции
- Урок 3. Переменные в JavaScript, обработка ошибок, функции и подъёмы
- Урок 4. Синтаксис основных операторов JavaScript
- Урок 5. Циклы for и while. Примеры использования циклов
- Урок 6. DOM - объектная модель документа, объект Window, обращение к элементу.
- Урок 7. Работа со стилями через JS, сиблинги, вставка и перемещение элементов.
- Урок 8. Обращение к атрибутам через JS, метод createDocumentFragment.
- Урок 9. Явление bubbling, отмена обработки событий в JS.
- Урок 10. Строки и регулярные выражения в JavaScript.
- Урок 11. Массивы.
- Урок 12. Цикличность.
- Урок 13. Свёртка и разворачивание массивов. Объекты.
- Урок 14. Библиотека jQuery.
- Урок 15. jQuery: мэппинг, append и appenTo. Обход DOM с использованием jQuery.
- Урок 16. AJAX, объект XMLHttpRequest.
- Курс 1-2
- Урок 17. Сценарии в HTML, метод document.write(), функция prompt(), операции сравнения, правило лжи в JavaScript.
- Урок 18. Оператор continue, использование блоков try catch finally, объект Math - математические операции.
- Урок 19. Объект Date - работа с датой и временем, объект window, параметры окна, метод confirm().
- Урок №20. Объект window - открытие/закрытие/изменение окон, управление положением и размерами окон.
- Урок 21. (в разработке)
Типы данных
JavaScript - слабо-неявно-типизированный язык. Это значит, что переменные не объявляются с типом и можно присваивать и переприсваивать переменным значения разных типов, а также смешивать значения в выражениях.
Например, сравнение числового значения 5 со строкой "5" выдаст true, однако при строгом сравнении результатом будет false:
5 == '5'; // true 5 === '5'; // false 5 + '5'; // равно строке '55' 5 + 5; // равно числу 55
Всё, что находится в кавычках - это строковый тип данных.
В JavaScript поддерживаются простые типы данных (числа, строки, булевы) и объекты. Объект - это коллекция свойств. Специальные объектов как типа данных - это массивы и функции. Есть также элементарные значения null underfined NaN. NaN - Not a Number ("нечисло").
NaN - это значение, которое неравно само себе. Рассмотрим примеры, в которых итог вычисления будет равен NaN:
+undefined; // NaN ++undefined; // NaN Math.sqrt(-1); // NaN parseInt("string"); // NaN
Одинарный плюс, поставленный перед значением (унарный префиксный плюс), пытается свести это значение к числу.
Команда Math обращается к объекту, выполняющему математические операции (регистр важен!), а метод .sqrt() - извлекает квадратный корень из указанного числа.
Команда typeof позволяет определить тип указанной переменной или выражения, например: typeof x;
parseInt() - функция, приводящая указанную переменную к числу, например она может преобразовать строку "5" в число 5.
Приведение типов
Явное преобразование - Number(), String(), Boolean(), Object() без new - указание JavaScript трактовать то или иное значение как число, строку, булевский тип или объект.
Все значения, кроме null/undefined имеют метод , обычно дающий то же, что возвращает функция String().
Если один из операндов инфиксного плюса является строкой, то второй тоже преобразуется в строку: x + "" - то же, что и String(x).
Унарный плюс преобразует свой операнд в число: +x - то же , что и Number(x).
Унарный восклицательный знак преобразует операнд в логическое значение и инвертирует его: !!x - то же, что и Boolean(x).
Number и parseInt
Метод Number может преобразовать в представление в системе счисления с основаниями от 2 до 36.
классаФункция Number() ждёт литерала целого или вещественного числа, а parseInt/parseFloat пытаются разобрать максимально возможное количество символов числа и игнорируют всё, что следует за ними.
Функции
В JavaScript функция - это объект особого типа, именованный и параметризованный блок программного кода, который определяется один раз, а использоваться может многократно. Это специфический тип данных: можно динамически генерировать функции, передавать их как параметры функций, возвращать их из функций, создавать массивы функций и т.д.
Функции могут быть именованными и безымянными, самовызывающимися и рекурсивными, они связанны с областями видимости.
Определение функций
Функции объявляются либо по имени, либо без имени, присваивая объявление переменной, либо создавая экземпляр объекта Function:
var pow1 = function(x,y){return Math.pow(x,y)}; // undefined pow1(2,3); // 8 var pow2 = new Function("x","y","return Math.pow(x,y)"); // undefined pow2(2,3); // 8
С помощью return функции могут возвращать значения (включая другие функции). Если функция ничего не возвращает, это рассматривается как undefined. Команда return - это досрочное завершение работы функции (если выполнена эта команда, дальнейшее выполнение функции прекращается).
Наиболее часто встречается первый вариант объявления функций.
Значения "x" и "y" указанные в скобках - это аргументы функции:
var x = 5; var y = 8; function calc(x,y){ var z = x + y; return z; }; var result = calc(x,y); console.log(result); // 13
В приведённом примере функция получает два аргумента, производит над ними вычисления и возвращает результат. Если вызвать функцию, которая ожидает аргументов, не передав их в неё, то значение этих аргументов будет приниматься за undefined:
function calc(x){ return x*x; }; console.log(calc()); // undefined*undefined=NaN
Функция может быть и без аргументов. Объект arguments доступен внутри тела функции. Для примера возьмём функцию, которая вычисляет среднее арифметическое заранее неизвестного количества чисел. Здесь мы заглянем немного вперёд, используя в качестве примера ещё не изученные конструкции:
function averageCalc(){ var numsNumber = arguments.length; var numsSum = 0; for(i=0; i<numsNumber; ++i){ numsSum += arguments[i]; } return numsSum/numsNumber; } console.log(averageCalc(12,5,4)); // результатом вычисления будет 7
arguments ведёт себя как массив, о чём мы поговорим позже.
Функцию, возвращающую среднее арифметическое переданных аргументов, в примере выше можно записать и в сокращённом варианте:
function averageCalc(){ for(i=0, numsSum=0, numsNumber=arguments.length; i<numsNumber; ++i){ numsSum += arguments[i]; } return numsSum/numsNumber; } console.log(averageCalc(12,5,4)); // Результат: 7
arguments.length - высчитывает количество переданных аргументов
Ещё раз скажу, что два последних примера приведены только для демонстрации работы функций, можете скопировать код в консоль браузера и посмотреть на результат. Подробный разбор незнакомых кодов в этих примерах будет позже.
