Типы данных JavaScript и jQuery
JavaScript предоставляет несколько встроенных типов данных. В дополнение к ним эта статья рассматривает виртуальные типы в jQuery такие как селекторы, расширенные псевдотипы как события, а также все виды функций.
Лучше если вы попробуете большинство примеров, изложенных ниже. Это можно легко сделать, просто скопировав эти примеры в консоль Firebug — расширения браузера Firefox.
Всякий раз, когда в примерах производятся операции в булевском контексте (например, при сравнении), важно знать, как себя ведет в таком контексте каждый из типов данных:
var x = "" if ( x ) console.log("x defaulted to true") else console.log("x defaulted to false")
В этом случае напечатается "x приравнивается к false".
Для уменьшения объема примеров используется оператор отрицания, чтобы показать булевский контекст:
!x // true
Типы данных в jQuery
- Строки
- Использование кавычек в строках
- Встроенные методы для строк
- Свойство length
- Булевский контекст
- Числа
- Булевский контекст
- Math
- Parsing Numbers
- Numbers to Strings
- NaN and Infinity
- Integer
- Float
- Булевский тип
- Объекты
- Dot Notation
- Array Notation
- Iteration
- Boolean default
- Prototype
- Options
- Массивы
- Iteration
- Boolean Default
- Array<Type> Notation
- Map
- Функции
- Аргументы
- Context, Call and Apply
- Область видимости
- Closures
- Proxy Pattern
- Callback-функции
- Селекторы
- События
- Элементы
- jQuery-тип
- Тип XMLHttpRequest
Строки
"Это строка JavaScript!" 'И это тоже строка!'
Строка в JavaScript — это неизменяемый объект, который содержит ни одного, один или несколько символов.
Типом строк является "string". Узнать тип строки можно так:
typeof "some string"; // "string"
Использование кавычек в строках
Строка может быть определена с помощью одинарных или двойных кавычек. Вы можете свободно использовать одинарные кавычки внутри строки, заключенной в двойные кавычки и наоборот. Чтобы использовать двойные кавычки внутри строк, заключенных в двойные кавычки, их нужно экранировать с помощью обратного слеша \
. Это относится и к одинарным кавычкам.
"You make 'me' sad." 'Holy "cranking" moses!' "<a href=\"home\">Главная</a>" '<a href=\'home\'>Главная</a>'
Встроенные методы для строк
В JavaScript имеется несколько встроенных методов для манипулирования строками, результат которых может быть как строка, так, например, и массив:
"hello".charAt(0) // "h" - получение символа в нужной позиции строки "hello".toUpperCase() // "HELLO" - преобразование строки в верхний регистр "Hello".toLowerCase() // "hello" - преобразование строки в нижний регистр "hello".replace(/e|o/g, "x") // "hxllx" - замена части строки на подстроку по шаблону регулярного выражения "1,2,3".split(",") // ["1", "2", "3"] - разбиение строки на массив по определенной подстроке
Свойство length
Строки имеют свойство length, которое определяет длину строки.
"Hello".length // 5 "".length // 0
Булевский контекст
Пустая строка приравнивается к значению false:
!"" // true !"hello" // false !"true" // false !new Boolean(false) // false
Числа
12 3.543
Числа в JavaScript имеют 64-битный формат двойной точности по стандарту IEEE 754. Они также являются неизменяемыми. Для работы с числами доступны все операторы, такие же как в языке C (+, -, *, /, %, =, +=, -=, *=, /=, ++, --).
Типом для чисел является "number". Проверить тип чисел можно так:
typeof 12 // "number" typeof 3.543 // "number"
Булевский контекст
Если число равно нулю, то оно приравнивается к false:
!0 // true !1 // false !-1 // false
Из-за того, что числа реализованы в формате с двойной точностью, результат следующего примера не является ошибочным:
0.1 + 0.2 // 0.30000000000000004
Объект Math
JavaScript предоставляет функции для работы с числами в объекте Math:
Math.PI // 3.141592653589793 Math.cos(Math.PI) // -1
Преобразование в числа
Функции parseInt
и parseFloat
преобразуют строки в числа. И та, и другая функция выполняет неявное преобразование, если не указана система счисления:
parseInt("123") = 123 (неявное преобразование десятичного числа) parseInt("010") = 8 (невяное преобразование восьмеричного числа) parseInt("0xCAFE") = 51966 (неявное преобразование шестнадцатеричного числа) parseInt("010", 10) = 10 (явное преобразование десятичного числа с указанием системы счисления 10) parseInt("11", 2) = 3 (явное преобразование двоичного числа) parseFloat("10.10") = 10.1
Преобразование чисел в строки
Если добавлять числа к строке с помощью операции "+", то результатом всегда будет строка. Чтобы произвести вычисления и только потом добавить число к строке, не забудьте заключить вычисления в круглые скобки:
"" + 1 + 2; // "12" "" + (1 + 2); // "3" "" + 0.0000001; // "1e-7" parseInt(0.0000001); // 1 (обратите внимание!)
Вы также можете использовать JavaScript-класс String, который преобразует переданное значение в строку:
String(1) + String(2); // "12" String(1 + 2); // "3"
Типы NaN и Infinity
Преобразование значений, которые не являются числами, приводит к результату NaN. Функция isNaN определяет, равно ли переданное в неё значение NaN:
parseInt("hello", 10) // NaN isNaN(parseInt("hello", 10)) // true
Деление на ноль дает в качестве результата бесконечность (Infinity):
1 / 0 // Infinity
И значение NaN и Infinity имеют тип "number":
typeof NaN // "number" typeof Infinity // "number"
Обратите внимание, что сравнение значений NaN происходит нестандартным способом:
NaN == NaN // false (!)
Однако:
Infinity == Infinity // true
Тип Integer
Integer — целочисленный тип.
Тип Float
Float — тип чисел с плавающей точкой.
Булевский тип (Boolean)
Булевский тип в JavaScript может принимать значение true или false:
if ( true ) console.log("always!") if ( false ) console.log("never!")
Например, булевский тип выглядит следующим образом при задании настроек при подключении плагинов jQuery:
$("...").somePlugin({ hideOnStartup: true, onlyOnce: false });
Объекты
Всё в JavaScript является объектом. Самый простой способ создать объект:
var x = {}; var y = { name: "Pete", age: 15 };
Типом для объектов является "object":
typeof {} // "object"
Свойства объекта
Вы можете изменять и получать свойства объекта, используя точечную нотацию:
y.name // "Pete" y.age // 15 x.name = y.name + " Pan" // "Pete Pan" x.age = y.age + 1 // 16
Вы также можете использовать объект в качестве массива:
var operations = { increase: "++", decrease: "--" } var operation = "increase"; operations[operation] // "++"; operations["multiply"] = "*"; // "*"
Итерации у объектов
Итерирование над объектами осуществляется очень легко с помощью оператора цикла for-in:
var obj = { name: "Pete", age: 15 }; for(key in obj) { alert("key is "+[key]+", value is "+obj[key]); }
jQuery предоставляет функцию
each
для итерираций по свойствам объектов или элементам массивов:
jQuery.each(obj, function(key, value) { console.log("key", key, "value", value); });
Булевский контекст
Объект, независимо от того, имеет ли он свойства или нет, всегда имеет значение true:
!{} // false
Прототипы
Все объекты имеют свойство prototype
. Всякий раз, когда интерпретатор ищет какое-либо свойства у объекта, он также проверяет его прототип. В jQuery этот механизм широко используется для добавления методов к экземплярам объектов jQuery.
var form = $("#myform"); form.clearForm; // undefined form.fn.clearForm = function() { return this.find(":input").each(function() { this.value = ""; }).end(); }; form.clearForm() // может быть применено ко всем экземплярам объектов jQuery, так как новый метод был добавлен к прототипу
Новое в справочниках
- Метод jQuery.ajax() / 20.04.2011
- jQuery-селектор [attribute$="value"] / 04.02.2011
- Метод jQuery.sub() / 31.01.2011
- Популярные плагины jQuery / 20.01.2011
- Метод .animate() в jQuery / 27.12.2010