Типы данных. Переменные в JavaScript Javascript задать тип переменной

Переменные JavaScript могут хранить данные самых разных типов - числа, строки, объекты и другие:

Var length = 16; // Число var lastName = "Сидоров"; // Строка var x = {firstName:"Иван", lastName:"Иванов"}; // Объект

Концепция типов данных

В программировании типизация данных является очень важной концепцией.

Чтобы можно было оперировать переменными, крайне важно знать об их типах.

Без типов данных компьютер не будет знать как безопасно вычислить, например, такое выражение:

Var x = 16 + "Volvo";

Имеет ли смысл добавлять к строке "Volvo" число 16? Это приведет к ошибке или какому-либо разумному результату?

JavaScript будет интерпретировать приведенный выше пример следующим образом:

Var x = "16" + "Volvo";

Внимание! При сложении числа и строки JavaScript будет воспринимать число как строку.

JavaScript вычисляет выражения слева направо. Таким образом, разные последовательности могут привести к разным результатам:

JavaScript: var x = 16 + 4 + "Volvo"; Результат: 20Volvo JavaScript: var x = "Volvo" + 16 + 4; Результат: Volvo164

В первом примере JavaScript воспринимает 16 и 4 как числа, пока не достигнет строки "Volvo".

Во втором примере, так как первый операнд - строка, все последующие операнды также считаются строками.

JavaScript типы являются динамическими

В JavaScript все типы данных являются динамическими. Это означает, что одна и та же переменная может использоваться для хранения данных разных типов:

Var x; // x имеет тип undefined x = 5; // теперь x - число x = "John"; // теперь x - строка

Строки в JavaScript

Строка (или текстовая строка) это последовательность символов, например, "Иван Петров".

Строки должны записываться внутри кавычек. Это могут быть двойные или одинарные кавычки:

Var carName = "Volvo XC60"; // Используются двойные кавычки var carName = "Volvo XC60"; // Используются одинарные кавычки

Внутри строки можно использовать кавычки только в том случае, если они отличаются от кавычек, в которые заключена строка:

Var answer = "It"s alright"; // Одинарные кавычки внутри двойных var answer = "He is called "Johnny""; // Одинарные кавычки внутри двойных var answer = "He is called "Johnny""; // Двойные кавычки внутри одинарных

Числа в JavaScript

В JavaScript существует только один тип числовых данных.

Числа могут записываться как с десятичной точкой, так и без нее:

Var x1 = 34.00; // С десятичной точкой var x2 = 34; // Без десятичной точки

Очень большие и очень малые числа могут записываться при помощи научной (экспоненциальной) нотации (имеет вид Mep, где M – число, e - означает "умножить на 10 в степени...", p – порядок или степень, в которую возводится 10):

Var y = 123e5; // 12300000 var z = 123e-5; // 0.00123

Логические данные в JavaScript

Есть два логических значения: true (истина) и false (ложь).

Var x = 5; var y = 5; var z = 6; (x == y) // Вернет true (x == z) // Вернет false

Логические значения часто используются в проверках различных условий.

Массивы в JavaScript

Массивы в JavaScript записываются при помощи квадратных скобок.

Элементы массива разделяются запятыми.

В следующем примере декларируется (создается) массив с именем cars, содержащий три элемента:

Var cars = ["Saab", "Volvo", "BMW"];

Индексация элементов массива начинается с нуля. Это означает, что первый элемент имеет индекс , второй и так далее.

Объекты в JavaScript

Объекты в JavaScript записываются при помощи фигурных скобок.

Свойства объектов записываются в виде пар имя:значение , разделенных запятыми.

Var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};

В приведенном выше примере объект с именем person имеет 4 свойства: firstName, lastName, age, eyeColor.

Оператор typeof

Чтобы определить тип данных переменной в JavaScript используется оператор typeof .

Оператор typeof возвращает тип данных переменной или выражения:

Typeof "" // Вернет "string" typeof "John" // Вернет "string" typeof "John Doe" // Вернет "string" typeof 0 // Вернет "number" typeof 314 // Вернет "number" typeof 3.14 // Вернет "number" typeof (3) // Вернет "number" typeof (3 + 4) // Вернет "number"

Тип undefined

В JavaScript переменные без значения на самом деле имеют значение undefined . И оператор typeof также покажет тип undefined .

Var car; // Значение undefined, тип undefined

Любую переменную можно "сбросить", присвоив ей значение undefined . Ее тип также станет undefined .

Car = undefined; // Значение undefined, тип undefined

Пустые значения

Пустое значение не имеет ничего общего со значением undefined .

У пустой строки есть корректные значение и тип.

Var car = ""; // Значение "", тип typeof "string"

Null

В JavaScript значение null означает "ничего". Это что-то чего не существует.

При этом в JavaScript тип null является объектом.

Вы можете обнулить объект присвоив ему значение null :

Var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}; person = null; // Теперь здесь значение null, но тип по прежнему object

Также, обнулить объект можно при помощи значения undefined :

Var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}; person = undefined; // Теперь здесь значение и тип undefined

Разница между undefined и null

Undefined и null равны по значению, но различны по типу:

Typeof undefined // undefined typeof null // object null === undefined // false null == undefined // true

Примитивные данные

Примитивными данными являются одиночные простые значения без дополнительных свойств и методов.

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

  • string
  • number
  • boolean
  • undefined
typeof "John" // Вернет "string" typeof 3.14 // Вернет "number" typeof true // Вернет "boolean" typeof false // Вернет "boolean" typeof x // Вернет "undefined" (если у переменной x нет значения)

Сложные (комплексные) данные

В JavaScript существует два сложных или комплексных типа данных:

  • function
  • object

Оператор typeof возвращает тип "object" для объектов, массивов и значения null.

Для функций оператор typeof возвращает тип не "object", а "function".

Typeof {name:"John", age:34} // Вернет "object" typeof // Вернет "object" (не "array", см. ниже) typeof null // Вернет "object" typeof function myFunc(){} // Вернет "function"

Внимание! Для массивов оператор typeof возвращает тип "object", потому что в JavaScript массивы являются объектами.

JavaScript или JS (сокращенно) не простой язык и начинающие разработчики узнают об этом не сразу. По началу они узнают азы и все кажется красочным и прекрасным. Заходя чуть глубже, появляются JavaScript массивы, объекты, callback’и и все подобное, что часто выносит мозг.

В JavaScript важно правильно проверять тип переменной. Допустим вы хотите узнать является ли переменная массивом или объектом? Как это правильно проверить? В этом конкретном случае, есть хитрости во время проверки и именно о них будет эта запись. Давайте сразу приступим.

Проверка типа переменной

Например вам нужно проверить является переменная объектом, массивом, строкой или числом. Для этого можно использовать typeof , но она не всегда выдаст правду и в примере ниже я покажу почему.

Этот пример я написал, чтобы наглядно показать, почему typeof не всегда правильный выбор.

Var _comparison = { string: "строка", int: 99, float: 13.555, object: {hello: "привет"}, array: new Array(1, 2, 3) }; // Вернет массив с ключами объекта var _objKeys = Object.keys(_comparison); for(var i = 0; i <= _objKeys.length - 1; i++) { // выведем в консоль тип каждой переменной console.log(typeof _comparson[_objKeys[i]]); }

Результат выполнения кода:

String number number object object

Верно? — Нет, конечно. Есть две проблемы. Каждая из них будет подробно описана и предложено решение.

Первая проблема: float число, выводится как number

Comparison.float не является числом и вместо number должно быть float (число с плавающей точкой).Чтобы это исправить, можно создать функцию с проверкой как в коде ниже.

Var _floatNumber = 9.22; var _notFloatNumber = 9; console.log(isFloat(_floatNumber)); console.log(isFloat(_notFloatNumber)); console.log(isFloat("")); function isFloat(n){ return Number(n) === n && n % 1 !== 0; }

Функция isFloat() выполняет проверку всех значений на числа с плавающей точкой. Сначала проверяется равна ли переменная n числу (Number(n) === n) и если да, то делается еще одна проверка на деление с остатком и если остаток есть, то возвращается булевой (true или false ) результат (n % 1 !== 0).

В примере выше она возвращает true , false и false . Первое значение имеет float тип, второе нет — это обычное число и последнее всего лишь пустая строка, которая не подходит под правила.

Вторая проблема: массив определился как объект

В самом первом примере, массив отобразился как объект и это не очень хорошо, так как иногда вам нужно использоваться именно этот тип и ничего больше.

Есть несколько способов для проверки переменной на тип массива.

Первый вариант (хороший вариант). Проверяем принадлежность data к массиву с помощью instanceof ().

Var data = new Array("hello", "world"); var isArr = data instanceof Array;

Второй вариант (хороший вариант). Метод Array.isArray() возвращает булевое значение, которе будет зависеть от того является ли переменная массивом или нет ().

Var data = new Array("hello", "world"); var isArr = Array.isArray(data);

Третий вариант (самый лучший, но длинный). Для удобности, вы можете сделать этот способ функцией. Используя Object, мы делаем . Если результат Object.prototype.toString.call(data) не равен значит переменная не массив ().

Var data = new Array("hello", "world"); var isArr = Object.prototype.toString.call(data) == ""; console.log(isArr);

Последний результат в виде удобной функции:

Function isArray(data) { return Object.prototype.toString.call(data) == "" }

Теперь вы можете вызвать функции isArray() и как аргумент задать массив или что-то иное и посмотреть результат.

Послесловие

Запись получилась достаточно большой, чем изначально задумывалась. Но я ей доволен, потому что она достаточно кратко и четко описывает затруднения при проверке переменных в JavaScript и как их обойти.

Если у вас остались какие-либо вопросы — пишите их ниже к этому записи. Я буду рад помочь.

В этом уроке мы познакомимся с очень важным понятием – типы данных JavaScript. Мы рекомендуем внимательно отнестись к данному понятию – если не осознать его с самого начала, то потом придется часто сталкиваться со странным поведением созданной вами программы.

Динамическая типизация

В процессе работы компьютерные программы манипулируют различными значениями, каждое из которых может быть обработано в языке программирования и относится к определённому типу данных.

В JavaScript типы данных можно разделить на две категории: простые (их также называют примитивными) типы и составные (их также называют ссылочными или объекты).

JavaScript – это слабо типизированный или динамический язык программирования, который позволяет определять типы данных, осуществлять синтаксический анализ и компиляцию как говорится «на лету», на этапе выполнения программы. Это значит, что вам не нужно определять тип переменной заранее. Тип определится автоматически во время выполнения программы.
Таким образом, в различных участках программы одна и та же переменная может принимать значения разных типов:

Типы данных

Стандарт ECMAScript® определяет следующие типы данных:

  • Простые (их также называют примитивными) типы:
    • логический (англ. Boolean) - может принимать два возможных значения, иногда называемых истиной (true) и ложью (false);
    • нулевой (англ. Null) – значение null представляет ссылку, которая указывает, обычно намеренно, на несуществующий или некорректный объект или адрес;
    • неопределённый (англ. Undefined) – обозначает предопределенную глобальную переменную, инициализированную неопределенным значением;
    • числовой (англ. Number) – числовой тип данных в формате 64-битного числа двойной точности с плавающей запятой;
    • строковый (англ. String) – представляет собой последовательность символов, используемых для представления текста;
    • символ (англ. Symbol​) - тип данных, экземпляры которого уникальны и неизменяемы. (новый в ECMAScript 6).
  • Объектный (англ. Object) – это коллекция именованных значений, которые обычно называют свойствами (properties) объекта.

Разница между примитивными и составными типами

Прежде чем рассмотреть каждый тип данных, познакомимся сначала с оператором typeof . Оператор typeof возвращает строку, описывающую тип данных переменной.
Продемонстрируем его работу на следующем примере:

Сценарий в приведенном примере объявляет переменные, выполняет их инициализацию (присваивает значения), а затем выводит тип каждой переменной.

Разница между примитивными и составными типами данных проявляется при копировании их значений.

Когда переменной присваивается значение простого типа, то в переменную записывается само значение (например число). Когда мы присваиваем переменную простого типа в другую, она копирует значение . В результате каждая переменная будет иметь своё значение и изменения в одной из переменных никак не сказывается на значении другой переменной:

Когда переменной присваиваем значение составного (ссылочного) типа, то в переменную записывается ссылка на значение (ссылка на объект ). Когда мы присваиваем одну переменную (в значении которой ссылка на составное значение) другой переменной, то происходит копирование ссылки на составное значение. В результате обе переменные ссылаются на одно и то же составное значение и изменения в значении одной из переменных будут сказываться на другой переменной:

Примитивные типы

Все типы данных в JavaScript, кроме объектов, являются неизменяемыми или иммутабельными (англ. immutable). Это значит, что их значения не могут быть модифицированы, а только перезаписаны новым другим значением. Например, строки нельзя корректировать посимвольно – их можно переписать только полностью. Значения таких типов называются "примитивными".

Простейшие данные, с которыми может оперировать программа, называются литералами. Литералы - это числа или строки, которые используются для представления значений в JavaScript. Предоставляемая информация может быть самой разнообразной, а поэтому значения бывают различных типов. Простейшие типы данных в JavaScript называются основными типами данных: числа, строки и логические значения. Все они относятся к "примитивным".

Булевый (логический) тип «boolean»

Логические, или булевы значения (по фамилии их изобретателя - Буля), могут иметь лишь одно из двух значений: true (истина) или false (ложь). Значения true или false обычно появляются в операциях сравнения или логических операциях.

Приведенная ниже программа создает булеву переменную, а затем тестирует ее значение с использованием инструкции if/else:

В качестве сравнительного выражения можно использовать любое выражение. Любое выражение, которое возвращает значение 0, null, undefined или пустую строку, интерпретируется как false . Выражение, определяющее какое-либо другое значение, интерпретируется как true .

Примечание: При записи булевых значений их не заключают в кавычки: var myVar = true;
В то же время объявление var myVar = "true" создает строковую переменную.

Тип данных Number

В JavaScript, нет различия между целым числом и числом с плавающей точкой – по сути, JavaScript представляет все числа в качестве значения с плавающей точкой.

Для представления чисел в JavaScript используется 64-битный формат, определяемый стандартом IEEE-754 . Этот формат способен представлять числа в диапазоне от ±1,7976931348623157 × 10 308 до ±5 × 10 -324 .

Число, находящееся непосредственно в коде программы, называется числовым литералом. Помимо десятичных целых литералов JavaScript распознает шестнадцатеричные значения.
Числа в шестнадцатиричном формате могут включать любую последовательность цифр от 0 до 9 и буквы от a до f, которая обязательно начинается с последовательности символов «0x».

Var a = 255; var b = 0xFF; // Число 255 в шестнадцатеричной системе исчисления

Кроме того, JavaScript содержит специальные числовые значения:

  • NaN (не число или ошибка вычислений). Является результатом некорректной математической операции над недопустимыми данными, такими как строки или неопределенное значение.
  • Infinity (положительная бесконечность). Используется, если положительное число слишком велико и не может быть представлено в JavaScript.
  • -Infinity (отрицательная бесконечность). Используется, если отрицательное число слишком велико и не может быть представлено в JavaScript.
  • ±0 (положительный и отрицательный 0). JavaScript различает положительный и отрицательный ноль.

Тип данных String

Строковый тип (string) - это неизменяемая, упорядоченная последовательность 16-битных значений, каждое из которых представляет символ Unicode (буквы, цифры, знаки пунктуации, специальные символы и пробелы). Строки могут быть пустыми либо состоять из одного и более символов. Строки создаются при помощи двойных (") или одинарных (") кавычек. В строке, ограниченной парой одинарных кавычек, можно использовать двойные кавычки, и наоборот – одинарные кавычки можно использовать в строке, заключенной в пару двойных кавычек:

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

var firstName = "Max"; //синтаксическая ошибка - разные кавычки

Примечание: В JavaScript нет специального типа данных для одного символа, такого как char в C, C++ и Java. Одиночный символ представлен строкой единичной длины.

Тип данных Null

Нулевой тип (null) содержит единственное специальное значение – null .

Ключевое слово null невозможно использовать в качестве имени функции или переменной. Значение null является ссылкой на «пустой» объект и имеет специальное назначение – обычно оно используется для инициализации переменной, которой впоследствии будет присвоено значение.

Оператор typeof для значения null возвращает строку «object», что свидетельствует о том, что значение null является специальным «пустым» объектом.

Тип данных Undefined

Неопределенный тип (undefined) образует свой собственный тип, который содержит единственное специальное значение – undefined . Такое значение имеет переменная, объявленная с помощью оператора var , но не инициализированная:

Значение undefined возвращается при обращении к переменной, которой никогда не присваивалось значение, а также к несуществующему свойству объекта или элементу массива.

Следует отметить, что переменная со значением undefined отличается от переменной, которая вообще не определена:

В этом примере метод alert() выводит значение переменной age , то есть undefined . Во втором случае в метод alert() передается необъявленная переменная car , что приводит к ошибке.

Следующй пример может несколько запутать начинающих программистов, т.к. оператор typeof и для неинициализированной, и для необъявленной переменной возвращает значение undefined:

В приведенном примере переменная age объявлена, но в неё ничего не записано, поэтому её значение как раз и есть undefined . Переменная car не объявлена – её, по сути, нет. Тем не менее, typeof возвращает строку undefined в обоих случаях. Некоторый смысл в этом, конечно, есть, потому что с любой из этих переменных невозможно выполнить никаких операций, хотя технически они совершенно разные.

Примечание: Рекомендуется всегда выполнять инициализацию объявленной пременной. В таком случае вы будете знать, что оператор typeof возвращает undefined из-за того, что переменная не была объявлена, а не потому, что она не инициализирована.

Значение undefined является производным от null , так что в ЕСМА-262 оператор эквивалентности == считает их равными:

Несмотря на то, что значения null и undefined связаны, используются они по-разному. Не следует явно присваивать переменной значение undefined , однако к null это требование не относится. В случае, когда необходимый объект недоступен, вместо него следует использовать null . Это указывает на то, что значение null было введено как указатель на пустой объект, и подчеркивает его отличие от undefined .

Чтобы отличать null и undefined в программе можно использовать оператор идентичности === :

Тип данных Символ (Symbol)

Символ (symbol) является нововведением JavaScript начиная с ECMAScript версии 6. Символ – это уникальное, неизменяемое, примитивное значение, которое служит для создания уникальных идентификаторов.

Чтобы создать символ нужно вызвать функцию Symbol:

var mySymbol = Symbol();

Для определения символа можно использовать оператор typeof , в случае если значения является символом будет возвращена строка symbol:

У функции Symbol есть необязательный параметр - строка, которая служит для описания символа:

Важной особенностью символа также является то, что его значение уникально. Вы можете использовать символ как имя свойства, которое гарантированно не будет повторяться с любым другим свойством. Даже, если у двух символов одинаковое имя, то это не значит, что они равны:

Тип данных Object

В дополнение к рассмотренным выше примитивным типам данных JavaScript поддерживает составной тип данных – объект (object). Объект состоит из многих значений (либо элементарных, таких как числа и строки, либо сложных, например других объектов), которые называются свойствами объекта. Доступ к свойствам осуществляется по имени свойства (иногда говорят «по ключу»).

Имя свойства является строкой, поэтому можно считать, что объекты связывают строки со значе­ниями. Вместе эти фрагменты информации образуют пары «ключ-значение».

В JavaScript объекты можно создавать одним из двух синтаксисов:

1. var obj = {}; // с помощью объектного литерала 2. var obj = new Object(); // с помощью метода, называемого конструктором

Создание объекта с помощью объектного литерала начинается с определения обыч­ной переменной. В правой части этой инструкции записывается литерал объекта – это заключенный в фигурные скобки {} список разделенных запятой пар "имя-значение" , заключенный в фигурные скобки. Имя свойства и значение отделены друг от друга двоеточием:

var cat = { "legs": 4, "name": "Мурзик", "color": "Рыжий" }

Второй способ создания объектов связан с использованием конструктора Object() . При этом сначала используется выражение new Object() , а затем определяются и инициализируются свойства полученного объекта:

  • Когда мы присваиваем одну переменную (в значении которой ссылка на составное значение) другой переменной, то происходит копирование ссылки на составное значение. В результате обе переменные ссылаются на одно и то же составное значение и изменения в значении одной из переменных будут сказываться на другой переменной.
  • Любое выражение, которое возвращает значение 0, null, undefined или пустую строку, интерпретируется как false .
  • Строки создаются при помощи двойных (") или одинарных (") кавычек. В строке, ограниченной парой одинарных кавычек, можно использовать двойные кавычки, и наоборот – одинарные кавычки можно использовать в строке, заключенной в пару двойных кавычек.
  • Значение null является ссылкой на «пустой» объект и имеет специальное назначение – обычно оно используется для инициализации переменной, которой впоследствии будет присвоено значение.
  • Значение (undefined) имеет переменная, объявленная с помощью оператора var , но не инициализированная.
  • Решение:

    Переменная – это именованный участок памяти, в который можно как сохранить некоторую информацию, так и получить её из неё.

    Объявление (создание) переменных осуществляется с помощью ключевого слова var .

    // message - имя переменной var message;

    При создании переменной ей сразу же можно присвоить значение.

    Присвоение переменной значения осуществляется с помощью оператора «=».

    // например, создадим переменную email и присвоим ей строку "[email protected]" var email = "[email protected]"; // установим переменной email новое значение email = "[email protected]";

    Для того чтобы получить значение переменной достаточно просто обратиться к ней по имени.

    // например, выведем в консоль браузера значение переменной email: console.log(email);

    Для того чтобы объявить не одну, а несколько переменных с помощью одного ключевого слова var , необходимо использовать запятую.

    Var price = 78.55, quantity = 10, message;

    JavaScript является языком с динамической или слабой типизацией. Это означает, что при объявлении переменной ей не нужно указывать тип данных, который она может принимать. Следовательно, в переменную можно поместить сначала значение, имеющее один тип данных, а потом другой.

    Var output = "успех"; // переменная имеет строковый тип данных output = 28; // эта же переменная, но уже имеющая тип данных «число» output = true; // эта же переменная, но уже хранящая булевское значение

    Значение переменной можно изменять неограниченное количество раз.

    // создана переменная age var age; // переменной age присвоено значения 67 age = 67; // переменной age установлено значение «Пенсионный возраст» age = "Пенсионный возраст"; // переменной age установлено число 55 age = 55;

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

    Имя переменной можно составлять из букв, цифр и символов $ и _. При этом первый символ переменной не должен быть цифрой. Кроме этого в качестве имени переменной нельзя использовать зарезервированные слова.

    // создание двух переменных, первая переменная имеет имя phone, вторая - meassage; var phone, message;

    Регистр букв в имени переменной имеет значение. Т.е., например, переменная phone и Phone - это две разные переменные.

    Если строгий режим не используется, то создать переменную с первоначальным значением можно и без ключевого слова var.

    Price = 250.00; // создали переменную и инициализировали её числом 250.00 percent = "20%"; // создали переменную и инициализировали её строкой «20%»

    Но создавать, таким образом, переменные не рекомендуется.

    Типы данных

    В JavaScript типы данных можно разделить на примитивные и объектные.

    Переменные, содержащие примитивные типы данных хранят значение явно.

    В JavaScript выделяют 5 примитивных типов данных:

    • число (number);
    • строка (string);
    • булевый тип (boolean);
    • null;
    • undefined.

    Если одной переменной присвоить значение другой, которая содержит примитивный тип данных, то она получит собственную копию этого значения.

    Var x = 77, y = x; x = 55; y; // 77

    Переменные, содержащие объект, на самом деле хранят не сам объект, а ссылку на него.

    Если одной переменной присвоить значение другой, которая содержит объект (ссылку на него), то она тоже получит ссылку на него. В результате этой операции две эти переменные будут содержать ссылку на один и тот же объект.

    // пример 1 (с типом данных «объект») var coord1 = {x: 77, y: 100}, coord2 = coord1; coord1.x = 55; // установим свойству x объекта новое значение coord2.x; // 55, т.к. coord1 и coord2 содержат ссылку на один и тот же объект // пример 2 (с типом данных «массив») var coord1 = , coord2 = coord1; coord1 = 55; // установим элементу с 0 индексом новое значение coord2; // 55, т.к. coord1 и coord2 содержат ссылку на один и тот же объект // пример 3 (с типом данных «дата») var date1 = new Date(2018,00,01), date2 = date1; date2 = date2.setDate(date2.getDate()+7); // увеличим дату на 7 дней date1; // 07.01.2018, т.к. date1 и date2 содержат ссылку на один и тот же объект

    Число (number)

    Числовой тип в JavaScript данных является универсальным . Он используется для представления, как целых , так и дробных чисел.

    Var int = 5; // целое число var float = 5.98; // дробное число

    Формат представления чисел в JavaScript осуществляется в соответствии со стандартом IEEE 754-2008.

    Целые числа в JavaScript можно задавать не только в десятичной системе счисления, но и в восьмеричной (0) или шестнадцатеричной системе счисления (0x) с использованием префиксов, указанных в круглых скобках:

    Var int = 010; // 8 int = 055; // 45 int = 0xFF; //255 int = 0xB8; // 184

    Записывать числа возможно в экспоненциальной форме :

    Var num = 2e3; // экспоненциальная запись числа 2*10^3 (2000) num = 2e-3; // экспоненциальная запись числа 2*10^-3 (0,002) num = 3.2e3; // 3200 num = 1.5e-2; // 0.015

    Числовой тип данных кроме чисел содержит ещё специальные числовые значения :

    • Infinity (положительная бесконечность);
    • -Infinity (отрицательная бесконечность);
    • NaN (Not a Number – не число).

    Специальное значения Infinity означает очень большое положительное число, т.е. число, которое не может быть представлено в JavaScript по причине того, что оно слишком велико.

    Специальные значения -Infinity означает наоборот очень большое отрицательное число, т.е. число, которое не может быть представлено JavaScript по причине того, что оно тоже слишком велико.

    Пример выражений в результате вычисления которых будет возвращены специальные числовые значения :

    5/0; // Infinity -5/0; // -Infinity Math.pow(10,399); // Infinity (10 в степене 399) Math.pow(10,399); // -Infinity (-10 в степене 399)

    Значение NaN возвращается в результате выполнения математических операций, которые JavaScript не может вычислить.

    5 - "Hi"; // NaN (от числа 5 отнять строку) 1000 / "20px"; // NaN (число поделить на строку) true * "1rem"; // NaN (логическое значение true умножить на строку)

    При этом очень интересным является то, что значение NaN в JavaScript не равно ничему включая себя.

    NaN == NaN; // false NaN === NaN; //false

    Логический тип данных (Boolean)

    Boolean – примитивный тип данных, который имеет всего два значения: true (истина) и false (ложь).

    Var a = true; var b = false;

    Строка (String)

    Строка (String) – это тип данных, который используется в JavaScript для представления текста.

    Строка JavaScript может состоять из 0 или большего количества символов.

    В качестве формата строки в JavaScript всегда использутся кодировка Unicode.

    Создание строки (литерала строки) выполняется посредством заключения текста в одинарные или двойные кавычки .

    "JavaScript"; "ECMAScript";

    В JavaScript нет разницы между одинарными и двойными кавычками.

    Но, в некоторых случаях есть смысл использовать именно одинарные кавычки, а не двойные и наоборот.

    Например, когда строка содержит двойные кавычки, её более удобно заключить в одинарные. Это избавит от необходимости экранирования в ней двойных кавычек.

    ""ECMAScript""; // без экранирования (с использованием одинарных кавычек) "\"ECMAScript\""; // с экранированием

    Строка в JavaScript может содержать специальные символы. Например, \n (перевод строки), \t (табуляция), \r (возврат каретки) и др.

    "Это предложение.\nА это тоже предложение, но оно будет начинаться с новой линии.";

    Со строками можно произовдить операцию сложения (объединения) или другими словами конкатенацию. Для этого используется оператор "+". Сымысл данной операции заключается в присоединении второй строки к концу первой.

    "Я люблю " + "JavaScript"; // Я люблю JavaScript

    Значение "undefined"

    undefined - специальный примитивный тип данных, который имеет одно значение, равное undefined .

    Этот тип данных имеет объявленная переменная, которой ещё не присвоено значение.

    Var num; // undefined

    Значение undefined также будет возвращено при обращении к несуществующему свойству объекта.

    Var obj = {}; // пустой объект obj.prop; // undefined

    Значение "null"

    null - специальный примитивный тип данных, который имеет одно значение, равное null .

    null - это просто специальное значение, которое имеет смысл «ничего» или «неизвестное значение», т.е. оно явно ничего не означает.

    Объект (Object)

    Объект – это структура данных, состоящая из пар имя-значение.

    Создание объекта с помощью нотации литерала объекта осуществляется следующим образом:

    { имя_1: значение_1, имя_2: значение_2, имя_3: значение_3, ... }

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

    При этом если в качестве значения пары выступает функция, то она называется методом этого объекта. Все остальные пары, т.е. пары в которых в качестве значения не используется функция, называются свойствами объекта.

    Другими словами, объект - это структура данных, состоящая из свойств и методов.

    Var person = { name: "Виталий", age: 27, getAge: function () { return "Возраст: " + this.age; } }

    Обращение к свойствам объекта выполняется через точку или посредством скобочной записи.

    // выведем значение свойства age в консоль браузера // 1 способ (через точку) console.log(person.age); // 2 способ (с помощью скобок) console.log(person["age"]); // вызовем метод getAge; значение, которое он вернет, выведем в консоль console.log(person.getAge());

    Оператор typeof

    Оператор typeof используется для получения информации о типе данных выражения в виде строки.

    Синтаксис оператора typeof (вариант без круглых скобок):

    Typeof выражение

    Синтаксис оператора typeof (с использованием круглых скобок):

    Typeof(выражение)

    Var name, age = 37, email = "[email protected]", isLicense = true, interest: null, lastExperience: { period: "June 2011 - June 2018", place: "ISACA, Moscow", position: "Web designer" }, getExperience: function() { return lastExperience.period + " ("+ lastExperience.position + " - " + lastExperience.place + ")"; }; typeof name; // "undefined" typeof age; // "number" typeof isLicense; // "boolean" typeof interest; // "object" (1) typeof lastExperience; // "object" typeof getExperience; // "function" (2) /* (1) - это ошибка, которая присутствует в языке, начиная с его первой реализации; она не была исправлена в целях сохранения совместимости и это необходимо учитывать, при написании сценариев; null - это примитивный тип данных, он не является объектом */ /* (2) - это очень удобно, что оператор typeof выделяет функции отдельно; но функция в JavaScipt - это тоже объект; в этом легко убедиться если выполнить следующую конструкцию: */ typeof getExperience.__proto__.__proto__ // "object" (прототипом функции является объект)

    Константы

    С выходом ECMAScript 6 появилось возможность создавать константы. Осуществляется это с помощью ключевого слова const.

    Const COLOR_RED = "#ff0000";

    Константа – это переменная, значение которой защищено от изменения. Т.е. при попытке поменять значение будет брошена ошибка.

    Const COLOR_RED = "#ff0000"; COLOR_RED = "#f44336"; // Uncaught TypeError: Assignment to constant variable.

    Если, например, константа содержит объект, то он не может быть изменен, а точнее ссылка на него. Но свойства этого объекта могут быть изменены.

    Const COLORS = { red: "#ff0000", green: "#00ff00", blue: "#00ff00" } COLORS = ["#ff0000","#00ff00","#00ff00"]; // Uncaught TypeError: Assignment to constant variable. COLORS.green = "#4caf50";

    Последнее обновление: 26.03.2018

    Все используемые данные в javascript имеют определенный тип. В JavaScript имеется пять примитивных типов данных:

      String : представляет строку

      Number : представляет числовое значение

      Boolean : представляет логическое значение true или false

      undefined : указывает, что значение не установлено

      null : указывает на неопределенное значение

    Все данные, которые не попадают под вышеперечисленные пять типов, относятся к типу object

    Числовые данные

    Числа в JavaScript могут иметь две формы:

      Целые числа, например, 35. Мы можем использовать как положительные, так и отрицательные числа. Диапазон используемых чисел: от -2 53 до 2 53

      Дробные числа (числа с плавающей точкой), например, 3.5575. Опять же можно использовать как положительные, так и отрицательные числа. Для чисел с плавающей точкой используется тот же диапазон: от -2 53 до 2 53

    Например:

    Var x = 45; var y = 23.897;

    В качестве разделителя между целой и дробной частями, как и в других языках программирования, используется точка.

    Строки

    Тип string представляет строки, то есть такие данные, которые заключены в кавычки. Например, "Привет мир" . Причем мы можем использовать как двойные, так и одинарные кавычки: "Привет мир" и "Привет мир" . Единственно ограничение: тип закрывающей кавычки должен быть тот же, что и тип открывающей, то есть либо обе двойные, либо обе одинарные.

    Если внутри строки встречаются кавычки, то мы их должны экранировать слешем. Например, пусть у нас есть текст "Бюро "Рога и копыта"" . Теперь экранируем кавычки:

    Var companyName = "Бюро \"Рога и копыта\"";

    Также мы можем внутри стоки использовать другой тип кавычек:

    Var companyName1 = "Бюро "Рога и копыта""; var companyName2 = "Бюро "Рога и копыта"";

    Тип Boolean

    Тип Boolean представляет булевые или логические значения true и false (то есть да или нет):

    Var isAlive = true; var isDead = false;

    null и undefined

    Нередко возникает путаница между null и undefined. Итак, когда мы только определяем переменную без присвоения ей начального значения, она представляет тип undefined:

    Var isAlive; console.log(isAlive); // выведет undefined

    Присвоение значение null означает, что переменная имеет некоторое неопределенное значение (не число, не строка, не логическое значение), но все-таки имеет значение (undefined означает, что переменная не имеет значения):

    Var isAlive; console.log(isAlive); // undefined isAlive = null; console.log(isAlive); // null isAlive = undefined; // снова установим тип undefined console.log(isAlive); // undefined

    object

    Тип object представляет сложный объект. Простейшее определение объекта представляют фигурные скобки:

    Var user = {};

    Объект может иметь различные свойства и методы:

    Var user = {name: "Tom", age:24}; console.log(user.name);

    В данном случае объект называется user, и он имеет два свойства: name и age. Это краткое описание объектов, более подробное описание приводится в соответствующей главе.

    Слабая типизация

    JavaScript является языком со слабой типизацией. Это значит, что переменные могут динамически менять тип. Например:

    Var xNumber; // тип undefined console.log(xNumber); xNumber = 45; // тип number console.log(xNumber); xNumber = "45"; // тип string console.log(xNumber);

    Несмотря на то, что во втором и третьем случае консоль выведет нам число 45, но во втором случае переменная xNumber будет представлять число, а в третьем случае - строку.

    Это важный момент, который надо учитывать и от которого зависит поведение переменной в программе:

    Var xNumber = 45; // тип number var yNumber = xNumber + 5; console.log(yNumber); // 50 xNumber = "45"; // тип string var zNumber = xNumber + 5 console.log(zNumber); // 455

    Выше в обоих случая к переменной xNumber применяется операция сложения (+). Но в первом случае xNumber представляет число, поэтому результатом операции xNumber + 5 будет число 50.

    Во втором случае xNumber представляет строку. Но операция сложения между строкой и числом 5 невозможна. Поэтому число 5 будет преобразовываться к строке, и будет происходить операция объединения строк. И результатом выражения xNumber + 5 будет стока "455".

    Оператор typeof

    С помощью оператора typeof можно получить тип переменной:

    Var name = "Tom"; console.log(typeof name); // string var income = 45.8; console.log(typeof income); // number var isEnabled = true; console.log(typeof isEnabled); // boolean var undefVariable; console.log(typeof undefVariable); // undefined