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

  1. Строки
    • Использование кавычек в строках
    • Встроенные методы для строк
    • Свойство length
    • Булевский контекст
  2. Числа
    • Булевский контекст
    • Math
    • Parsing Numbers
    • Numbers to Strings
    • NaN and Infinity
    • Integer
    • Float
  3. Булевский тип
  4. Объекты
    • Dot Notation
    • Array Notation
    • Iteration
    • Boolean default
    • Prototype
  5. Options
  6. Массивы
    • Iteration
    • Boolean Default
    • Array<Type> Notation
  7. Map
  8. Функции
    • Аргументы
    • Context, Call and Apply
    • Область видимости
    • Closures
    • Proxy Pattern
  9. Callback-функции
  10. Селекторы
  11. События
  12. Элементы
  13. jQuery-тип
  14. Тип 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, так как новый метод был добавлен к прототипу