Js тип переменной – Неявное преобразование типов в JavaScript. Сколько будет !+[]+[]+![]? / RUVDS.com corporate blog / Habr

Справочник javascript: typeof

Вызов typeof возвращает строку, содержащую информацию о типе операнда.

Оператор typeof используется в двух формах:

  1. typeof operand
  2. typeof (operand)

Эти формы идентичны: можно использовать скобки, а можно и не использовать — работает одинаково.

Оператор возвращает тип в виде строки, например:

var a = 5
alert(typeof a) // "number"

var a = 'test'
alert(typeof a) // "string"

Тип typeof возвращается, исходя из следующей таблицы соответствия типам javascript:

ТипРезультат
Undefined«undefined»
Null«object»
Boolean«boolean»
Number«number»
String«string»
Function«function»
Любой другой объект«object»

Часто возникают вопросы — почему и зачем таблица именно такая? Ответ простой: потому что так получилось по ходу развития javascript.

В старом javascript-коде можно увидеть применение typeof для проверки существования переменной:

if (typeof(var) == "undefined") { ... }

В современном javascript лучше писать:

if (window.var !== undefined) { ... }

или, зачастую, подойдет и просто:

if (window.var) { ... }

P.S. Использовать просто if(var) нельзя, так как доступ к неопределенной переменной вызовет ошибку. Ну а обращение к отсутствующему свойству глобального объекта window всего лишь вернет undefined

Кроме того, оператор typeof используется для полиморфизма. Например, следующая функция получает узел DOM или ID узла и в обоих случаях корректно прячет узел.

function hideNode(node) {
  if (typeof node == 'string') {
    node = document.getElementById(node)
  }
  node.style.display = 'none'
}

Типы данных 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"]; 

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

Подробнее о массивах будет рассказано дальше в этом учебнике.

Объекты в 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 является объектом.

Внимание! Случайно можно посчитать ошибкой, что проверка типов typeof null возвращает тип объект. Ведь он, очевидно, должен быть 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 существует два сложных или комплексных типа данных:

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

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


typeof {name:'John', age:34} // Вернет "object"
typeof [1,2,3,4]             // Вернет "object" (не "array", см. ниже)
typeof null                  // Вернет "object"
typeof function myFunc(){}   // Вернет "function"

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

JavaScript | Типы данных

333 142

Веб-программирование — JavaScript — Типы данных

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

Специальные значения null и undefined являются элементарными значениями, но они не относятся ни к числам, ни к строкам, ни к логическим значениям. Каждое из них определяет только одно значение своего собственного специального типа.

Любое значение в языке JavaScript, не являющееся числом, строкой, логическим значением или специальным значением null или undefined, является объектом.

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

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

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

Функции, которые пишутся для инициализации вновь создаваемых объектов (с оператором new), называются конструкторами. Каждый конструктор определяет класс объектов — множество объектов, инициализируемых этим конструктором. Классы можно представлять как подтипы объектного типа.

В дополнение к классам Array и Function в базовом языке JavaScript определены еще три полезных класса. Класс Date определяет объекты, представляющие даты. Класс RegExp определяет объекты, представляющие регулярные выражения (мощный инструмент сопоставления с шаблоном). А класс Error определяет объекты, представляющие синтаксические ошибки и ошибки времени выполнения, которые могут возникать в программах на языке JavaScript. Имеется возможность определять собственные классы объектов, объявляя соответствующие функции-конструкторы.

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

Числа

В отличие от многих языков программирования, в JavaScript не делается различий между целыми и вещественными значениями. Все числа в JavaScript представляются вещественными значениями (с плавающей точкой). Для представления чисел в JavaScript используется 64-битный формат, определяемый стандартом IEEE 754. Этот формат способен представлять числа в диапазоне от ±1,8 x 10308 до ±5 x 10-324.

В JavaScript целые десятичные числа записываются как последовательность цифр. Помимо десятичных целых литералов JavaScript распознает шестнадцатеричные значения. Шестнадцатеричные литералы начинаются с последовательности символов «0x», за которой следует строка шестнадцатеричных цифр. Шестнадцатеричная цифра — это одна из цифр от 0 до 9 или букв от A до F, представляющих значения от 10 до 15:

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

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

Литералы вещественных чисел могут также представляться в экспоненциальной нотации: вещественное число, за которым следует буква e (или E), а затем необязательный знак плюс или минус и целая экспонента. Такая форма записи обозначает вещественное число, умноженное на 10 в степени, определяемой значением экспоненты:

   var a = 16.75;
   var b = 2e4;  // 2 * 10^4 = 20 000

Арифметические операции

Обработка чисел в языке JavaScript выполняется с помощью арифметических операторов. В число таких операторов входят: оператор сложения +, оператор вычитания — , оператор умножения *, оператор деления / и оператор деления по модулю % (возвращает остаток от деления).

Помимо этих простых арифметических операторов JavaScript поддерживает более сложные математические операции, с помощью функций и констант, доступных в виде свойств объекта Math:

Math.pow(2,53)            // 2 в степени 53
Math.round(.6)            // Округление до ближайшего целого (результат 1.0)
Math.ceil(.6)             // Округление вверх (результат 1.0)
Math.floor(.6)            // Округление вниз (результат 0)
Math.abs(-5)              // Модуль числа (результат 5)
Math.max(x,y,z)           // Возвращает наибольший аргумент
Math.min(x,y,z)           // Во

JavaScript Типы данных



JavaScript типы данных

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

var length = 16;                                 // Числа
var lastName = «Андрей»                          // Строки
var x = {firstName:»Андрей», lastName:»Щипунов»};// Объекты


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

При программировании типы данных являются важной концепцией.

Возможность работать с переменными, важно знать кое-что о типах данных.

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

var x = 16 + «Вольво»;

Есть ли смысл, добавлять число шестнадцать до "Вольво"? Будет выдавать ошибку или получит результат?

JavaScript будет рассматривать приведенный пример выше, так же как:

var x = «16» + «Вольво»;

При добавлении в JavaScript числа к строке, число, будет рассматриваться, как строка.

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

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

Во втором примере, поскольку первый операнд является строкой, все операнды обрабатываются как строки.


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

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

Пример

var x;              // x не определен
var x = 5;          // x — число
var x = «Андрей»;   // x — строка

Редактор кода »

JavaScript строки

Строка (или текстовая строка) представляет собой серию символов, таких как "Андрей Щипунов".

Строки пишутся в кавычках. Можно использовать одиночные или двойные кавычки:

Пример

var carName = «Вольво XC60»;   // Использование двойных кавычек
var carName = ‘Вольво XC60’;   // Использование одиночных кавычек

Редактор кода »

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

Пример

var answer = «Его зовут ‘Андрей'»;    // Одинарные кавычки внутри двойных кавычек
var answer = ‘Его зовут «Андрей»‘;    // Двойные кавычки внутри одинарных кавычек

Редактор кода »

Подробнее о строках вы узнаете далее в этом учебнике.


JavaScript числа

JavaScript имеет только один тип чисел.

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

Пример

var x1 = 34.00;     // Написано с десятичными знаками
var x2 = 34;        // Написано без десятичных знаков

Редактор кода »

Очень большие или очень маленькие числа, можно записать в научной (экспоненциальной) нотации:

Подробнее о числах вы узнаете далее в этом учебнике.


JavaScript логические значения

Булевы могут иметь только два значения: true или false.

Пример

var x = 5;
var y = 5;
var z = 6;
(x == y)       // Возвращает true
(x == z)       // Возвращает false

Редактор кода »

Булевы часто используются при условном тестировании.

Более подробно об условном тестировании вы узнаете далее в этом учебнике.


JavaScript массивы

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

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

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

Индексы массивов начинаются с нуля, что означает, что первый элемент [0], второй — [1], и так далее.

Подробнее о массивах вы узнаете далее в этом учебнике.


JavaScript объекты

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

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

Пример

var person = {firstName:»Андрей», lastName:»Щипунов», age:49, eyeColor:»зеленый»};

Редактор кода »

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

Более подробно об объектах вы узнаете далее в этом учебнике.


Оператор вызова

Вы можете использовать JavaScript оператор typeof, вызвать тип переменной JavaScript.

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

Пример

typeof «»                  // Возвращает «строку»
typeof «Андрей»              // Возвращает «строку»
typeof «Андрей Щипунов»          // Возвращает «строку»

Редактор кода »

Пример

typeof 0                   // Возвращает «число»
typeof 314                 // Возвращает «число»
typeof 3.14                // Возвращает «число»
typeof (3)                 // Возвращает «число»
typeof (3 + 4)             // Возвращает «число»

Редактор кода »

Значение undefined

В JavaScript переменная без значения, имеет значение undefined — неопределенно. Оператор typeof также, имеет значение undefined.

Пример

var car;                // Значение неопределенно, тип неопределен

Редактор кода »

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

Пример

car = undefined;        // Значение неопределенно, тип неопределен

Редактор кода »

Значение пустое

Пустое значение не имеет ничего общего с неопределенным.

Пустая строка имеет как допустимое значение, так и тип.

Пример

var car = «»;              // Значение «», typeof, являться «строкой»

Редактор кода »

Тип данных null

В JavaScript тип данных null — нуль, являться «ничто». Это должно быть то, чего не существует.

Но, в JavaScript тип данных null является объектом.

Вы можете считать это ошибкой в JavaScript, что typeof null, является объектом. Он должен быть null.

Можно опустошить объект, установив для него значение null:

Пример

var person = {firstName:»Андрей», lastName:»Щипунов», age:49, eyeColor:»зеленый»};
person = null;        // Теперь значение является null, но тип по-прежнему является объектом

Редактор кода »

Также можно очистить объект, установив для него значение undefined:

Пример

var person = {firstName:»Андрей», lastName:»Щипунов», age:49, eyeColor:»зеленый»};
person = undefined;   // Теперь и значение и тип: неопределенны

Редактор кода »

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

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

typeof undefined           // неопределенно
typeof null                // объект

null === undefined         // лож
null == undefined          // правда

Редактор кода »

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

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

Оператор typeof может возвратить один из этих примитивных типов:

  • строка
  • число
  • логическое значение
  • неопределенно

Пример

typeof «Андрей»            // Возвращает «строку»
typeof 3.14                // Возвращает «число»
typeof true                // Возвращает «логическое значение»
typeof false               // Возвращает «логическое значение»
typeof x                   // Возвращает «неопределенно» (если x имеет значение)

Редактор кода »

Сложные данные

Оператор typeof, может возвратить один из двух сложных типов:

  • функцию
  • объект

Оператор typeof возвращает объект для обоих объектов, массивов и нуля

Оператор typeof не возвращает объект для функции.

Пример

typeof {name:’Андрей’, age:49}// Возвращает «объект»
typeof [1,2,3,4]              // Возвращает «объект» (не «массив», см. Примечание ниже)
typeof null                   // Возвращает «объект»
typeof function myFunc(){}    // Возвращает «функцию»

Редактор кода »

Оператор typeof возвратит «объект» для массива, потому что в JavaScript массивы являются объектами.



Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *