Основные типы ECMAScript

ECMAScript имеет 5 исходных типов (primitive type), то есть Undefined, Null, Boolean, Number и String.

Оператор typeof

Оператор typeof имеет один параметр, то есть переменную или значение, которое нужно проверить. Например:

var sTemp = "test string";
alert (typeof sTemp);    //вывод "string"
alert (typeof 86);    //вывод "number"

Вызов оператора typeof переменной или значения возвращает одно из следующих значений:

  • undefined - если переменная является типом Undefined
  • boolean - если переменная является типом Boolean
  • number - если переменная является типом Number
  • string - если переменная является типом String
  • object - если переменная является типом ссылочного или Null

Комментарий:Вы, возможно, спросите, почему оператор typeof возвращает "Object" для значения null. Это实际上是 ошибка в最初шей реализации JavaScript, которую затем продолжили использовать ECMAScript. В настоящее время null рассматривается как占щик места для объекта, что объясняет это противоречие, но технически он все еще является исходным значением.

Тип Undefined

Как уже упоминалось ранее, тип Undefined имеет только одно значение, то есть undefined. При отсутствии инициализации переменной, ее значение по умолчанию является undefined.

var oTemp;

Предыдущая строка кода объявляет переменную oTemp, не имеющую значения. Эта переменная будет иметь значение undefined, то есть литерал типа undefined. можно использовать следующий фрагмент кода для проверки того, равна ли переменная undefined:

var oTemp;
alert(oTemp == undefined);

Этот код выводит "true", что означает, что эти два значения действительно равны. Также можно использовать оператор typeof для отображения значения переменной как undefined:

var oTemp;
alert(typeof oTemp); // Вывод "undefined"

Совет:Значение undefined не отличается от неопределенного значения. Однако оператор typeof не действительно различает эти два значения. Рассмотрим следующий код:

var oTemp;
alert(typeof oTemp);  // Вывод "undefined"
alert(typeof oTemp2);  // Вывод "undefined"

Предыдущий код выводит "undefined" для обоих переменных, даже если переменная oTemp2 не была объявлена. Если использовать другие операторы, кроме typeof, для oTemp2, это вызовет ошибку, потому что другие операторы могут использоваться только для уже объявленных переменных.

Например, следующая строка кода вызовет ошибку:

var oTemp;
alert(oTemp2 == undefined);

Когда функция не имеет明确规定返回 значения, она также возвращает значение "undefined", как показано ниже:

function testFunc() {
}
alert(testFunc() == undefined);  // Вывод "true"

Тип Null

Другой тип с одним значением - Null, у него есть только один专用 значений null, то есть его литерал. Значение undefined фактически происходит от значения null, поэтому ECMAScript определяет их как равные.

alert(null == undefined);  // Вывод "true"

Хотя эти два значения равны, их значения различаются. Undefined - это значение, которое присваивается переменной, которая была объявлена, но не инициализирована, null используется для представления объектов, которые еще не существуют (об этом简要 упоминалось при обсуждении оператора typeof). Если функция или метод должен возвращать объект, то при невозможности найти этот объект, обычно возвращается null.

Тип Boolean

Тип Boolean является одним из самых часто используемых типов в ECMAScript. У него есть два значения true и false (то есть два литерала Boolean).

Несмотря на то, что false не равно 0, 0 можно преобразовать в false, если это необходимо, поэтому их безопасно использовать в условных операторах Boolean.

var bFound = true;
var bLost = false;

Тип Number

Самый особенный тип, определенный в ECMA-262, это тип Number. Этот тип может представлять как 32-битные целые числа, так и 64-битные числа с плавающей запятой.

Любое число, введенное напрямую (а не из другого переменной), рассматривается как литерал типа Number. Например,下面的 код объявляет переменную, содержащую целое значение, его значение определено литералом 86:

var iNum = 86;

Восьмеричные и шестнадцатеричные числа

Целые числа также можно представить в виде литералов в восьмеричной (с основанием 8) или шестнадцатеричной (с основанием 16) системе счисления. Литерал в восьмеричной системе счисления начинается с 0, за ним следуют любые восьмеричные цифры (0-7), как показано в следующем коде:

var iNum = 070;  //070 равно десятичным 56

Чтобы создать литерал в шестнадцатеричной системе счисления, первым числом должно быть 0, за ним следует литера x, затем任意ные шестнадцатеричные цифры (0 до 9 и A до F). Эти литеры могут быть большими или маленькими. Например:

var iNum = 0x1f;  //0x1f равно десятичным 31
var iNum = 0xAB;  //0xAB равно десятичным 171

Совет:Хотя все целые числа можно представить в виде литералов в восьмеричной или шестнадцатеричной системе счисления, все математические операции возвращают десятичные результаты.

Числа с плавающей запятой

Чтобы определить плавающую величину, необходимо включить точку и хотя бы одну цифру после точки (например, использовать 1.0 вместо 1). Это считается плавающим литералом. Например:

var fNum = 5.0;

Интересной особенностью плавающих литералов является то, что перед вычислением действительно хранится строка.

Научная запись

Для очень больших или очень маленьких чисел можно использовать научную запись для представления чисел с плавающей запятой, можно представить число как цифру (включая десятичные цифры) + e (или E),后面加乘以 10 в степени. Например:

var fNum = 5.618e7

Этот символ означает число 56180000. Преобразовав научную запись в арифметическое выражение, можно получить это значение: 5.618 x 107

Маленькие числа также можно представить в виде научной записи, например, 0.00000000000000008 можно представить как 8-e17(Здесь, 10 поднимается до -17 степени корня, что означает, что его нужно разделить на 10 17 раз). ECMAScript по умолчанию преобразует плавающие числа с 6 или более ведущими нулями в научную нотацию.

Совет:Числовые значения также могут храниться в виде 64-битного формата IEEE 754, что означает, что десятичное значение может иметь до 17 десятичных знаков. Значения после 17 знаков будут отрезаны, что может привести к некоторым малым математическим ошибкам.

Специальные значения типа Number

Несколько специальных значений также определены как тип Number. Первые два - это Number.MAX_VALUE и Number.MIN_VALUE, они определяют внешние границы набора значений Number. Все числа ECMAScript должны быть между этими двумя значениями. Однако вычисляемые числовые результаты могут не попадать между этими двумя значениями.

Когда вычисляемое значение больше Number.MAX_VALUE, оно приравнивается к значению Number.POSITIVE_INFINITY, что означает, что больше нет числовых значений. Также, вычисляемое значение, которое меньше Number.MIN_VALUE, будет приравнено к значению Number.NEGATIVE_INFINITY, что также означает, что больше нет числовых значений. Если вычисление возвращает бесконечно большое значение, то результат больше не может использоваться в других вычислениях.

Действительно, есть особые значения, которые представляют бесконечность (как можно было ожидать), это Infinity. Значение Number.POSITIVE_INFINITY равно Infinity. Значение Number.NEGATIVE_INFINITY равно -Infinity.

Поскольку бесконечно большое значение может быть как положительным, так и отрицательным, можно использовать метод для определения того, является ли число конечным (а не отдельно проверять каждый бесконечный числовой результат). Метод isFinite() можно вызвать для любого числа, чтобы убедиться, что оно не бесконечно. Например:

var iResult = iNum * some_really_large_number;
if (isFinite(iResult)) {
    alert("finite");
}
else {
    alert("infinite");
}

Последний особый значение - это NaN, что означает 'не число' (Not a Number). NaN - это странное особое значение. Обычно это происходит при неудачной конверсии типов (String, Boolean и т.д.). Например, попытка преобразовать слово 'blue' в числовое значение будет неудачной, так как нет эквивалентного числового значения. Как и бесконечность, NaN не может использоваться в арифметических вычислениях. Одна из странных особенностей NaN в том, что он не равен себе, что означает, что следующий код вернет false:

alert(NaN == NaN);  //вывод "false"

Из-за этой причины не рекомендуется использовать саму значение NaN. Функция isNaN() справляется с этим довольно хорошо:

alert(isNaN("blue"));  //вывод "true"
alert(isNaN("666"));  //вывод "false"

Тип String

Уникальность типа String заключается в том, что он единственный из原始ных типов, у которого нет фиксированного размера. В строку можно поместить 0 или более Unicode символов, которые представляют 16-битные целые числа (Unicode - это международный набор символов, который будет обсуждаться в этом руководстве).

Каждый символ строки имеет определенное положение, и первый символ начинается с позиции 0, второй символ в позиции 1 и так далее. Это означает, что положение последнего символа в строке всегда равно длине строки минус 1:

Длина строки и позиция символов

Литералы строк определяются двойными ("), или одинарными ('), кавычками. В Java строки определяются двойными кавычками, а символы - одинарными, но поскольку ECMAScript не имеет типа символа, можно использовать любое из этих двух представлений. Например, следующие строки кода являются действительными:

var sColor1 = "red";
var sColor2 = 'red';

Тип String также включает несколько литералов символов, с которыми должны быть знакомы разработчики Java, C и Perl.

Ниже приведены литералы символов ECMAScript:

_literals значение
\n переход на новую строку
\t табуляция
\b пробел
\r возврат каретки
\f страница
\\\ 反斜杠
\' одинарные кавычки
\" двойные кавычки
\0nnn восьмеричный код nnn означает символ (n (является одним из восьмеричных чисел от 0 до 7)
\xnn шестнадцатеричный код nn означает символ (n (является одним из шестнадцатеричных чисел от 0 до F)
\unnnn шестнадцатеричный код nnnn означает Unicode символ (n (является одним из шестнадцатеричных чисел от 0 до F)