01. Данные
Типы данных JavaScript
![]() |
JavaScript поддерживает следующие типы данных:
|
Первое удивление: функция отнесена к данным? Как это? Да, это особенность JavaScript, в которую, программирующие на Си или Паскале, поначалу отказываются верить! Посмотрите на выражение, которое выполняет сортировку элементов массива a по возрастанию:
a.sort(function(a,b){return a-b;});
Видим, что в качестве аргумента метода sort() записано определение безымянной функции. То есть функция function(a,b){return a-b;} передаётся внутрь другой функции a.sort() как данные.
Можно написать такой код:
function test(f)
{
var y = 10;
return f(y);
}
var z = test(function(a){return a*a;}) // z станет равным 100
var t = test(function(a){return a+a;}) // z станет равным 20
Непривычно? А какие открываются возможности! Ну, ладно, давайте разбираться по-порядку.
Выражение function(a){return a*a;}, как и function(a){return a+a;} является литералом. Ничем не хуже и не лучше литерала-числа 25 или литерала-строки "Роботландия".
Литерал — это значение данных, указанное непосредственно в теле программы. Литерал, в отличие от переменной, не имеет имени, поэтому срок его жизни ограничен тем контекстом, в котором он расположен.
Например, запись x+1 представляет собой выражение, в котором суммируются значение переменной x и значение литерала 1.
Примеры литералов:
25 // Литерал-число
"Роботландия" // Литерал-строка
true // Литерал логического значения
[25, "Роботландия", true] // Литерал массива из трех элементов
function(a){return a*a;} // Литерал функции
{x:1, f:function(a){return a*a;}} // Литерал объекта, в котором
// определено свойство x и метод f.
// Свойству x присвоено значение
// литерала 1, а методу f значение
// литерала function(a){return a*a;}
Определить тип данных можно при помощи унарного оператора typeof, который размещают перед своим операндом:
typeof 25 // Значением будет строка "number"
typeof "Роботландия" // Значением будет строка "string"
typeof true // Значением будет строка "boolean"
typeof [25, "Роботландия", true] // Значением будет строка "object"
typeof function(a){return a*a;} // Значением будет строка "function"
typeof {x:1, y:2} // Значением будет строка "object"
typeof Date // Значением будет строка "object"
typeof x // Значением будет строка, обозначающая
// тип данных, находящихся в переменной
// x в текущий момент
Операнд оператора typeof можно заключать в круглые скобки, и тогда операция будет смотреться как вызов функции:
typeof(25) // Равно "number"
typeof("Роботландия") // Равно "string"
Обратите внимание, тип функции определяется строкой "function", а не "object", хотя функции (как и массивы) являются специализированными объектами в языке JavaScript.