Типы Данных

Типы Данных, typeof

x = 1;             // число
x = "Тест";        // строка, кавычки могут быть одинарные или двойные
x = true;          // булево значение true/false
x = null;          // спец. значение (само себе тип)
x = undefined;     // спец. значение (само себе тип)
var vegetable = { name: "Буряк", qty: 2 };

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

Объекты

Строки

var str = "Мама мыла раму";
str = 'Одинарные кавычки тоже подойдут';
var visitorName = promt('Как вас зовут?', "Буряк");

В JavaScript одинарные и двойные кавычки равноправны. 
Можно использовать или те или другие.

Объединение строк

'one string ' + ' another string'

Объединение строк еще называется конкатенация

var name = "Dave";
var message = "Hello " + name;

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

alert( '1' + 2 ); // "12"
alert( 2 + '1' ); // "21"

Объединение длинных строк

var visitorName = promt('Как вас зовут?', 'Буряк');
var message = "Привет " + visitorName + '. Добро пожаловать на урок по JavaScript. ' + 'Рад наблюдать за твоими успехами';

message = message + '...';
message += "...."

Числа

var n = 123;
n = 12.345;
alert(12345 / 0); // Infinity
alert(-1 / 0); // -Infinity

Ошибка вычислений NaN будет результатом некорректной математической операции

alert( "нечисло" * 2 ); // NaN, ошибка

Infinity (бесконечность)

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

var iLoveBorsch = true;
var iDontLoveBorsch = false;

У него всего два значения:

true (истина) и false (ложь).

«null»

var age = null;

Значение неизвестно

«undefined»

var x;
alert( x ); // выведет "undefined"

Значение не присвоено

Объект «object»

var vegetable = { name: "Буряк", qty: 2 };

var message = "Нам нужны овощи: ";
message += vegetable.name;
message += ", в количестве: ";
message += vegetable.qty;
message += " штук.";

document.write(message);

 Он используется для коллекций данных и для объявления более сложных сущностей.

Оператор typeof

typeof undefined // "undefined"

typeof 0 // "number"

typeof true // "boolean"

typeof "foo" // "string"

typeof {} // "object"

typeof null // "object"  (1)

typeof function(){} // "function"  (2)
  1. Синтаксис оператора: typeof x.
  2. Синтаксис функции: typeof(x).

Основные операторы: терминология

  1. Операнд – то, к чему применяется оператор. Например: 5 * 2 – оператор умножения с левым и правым операндами. Другое название: «аргумент оператора».
  2. Унарным называется оператор, который применяется к одному выражению. Например, оператор унарный минус "-" меняет знак числа на противоположный:
  3. Бинарным называется оператор, который применяется к двум операндам. Тот же минус существует и в бинарной форме:
var x = 1;

x = -x;
alert( x ); // -1, применили унарный минус
var x = 1, y = 3;
alert( y - x ); // 2, бинарный минус

Основные операторы

Operator Name Purpose Example
+ Addition Adds two numbers together. 6 + 9
- Subtraction Subtracts the right number from the left. 20 - 15
* Multiplication Multiplies two numbers together. 3 * 7
/ Division Divides the left number by the by right. 10 / 5
% Remainder (sometimes called modulo)

Returns the remainder left over after you've shared the left number out into a number of integer portions equal to the right number.

8 % 3 (returns 2, as three goes into 8 twice, leaving 2 left over.)

Все любят математику! :)

Инкремент/декремент: ++, --

Постфиксность

var i = 2;

i++;
alert(i) //3

i--;
alert(i) //2

Префиксность.

var i = 1;
alert( 2 * ++i ); // 4

Инкремент/декремент можно использовать в любых выражениях

var i = 2;

++i;
alert(i) //3

--i;
alert(i) //2

Постфиксная форма i++ отличается от префиксной ++i тем, что возвращает старое значение, бывшее до увеличения.

Сокращенная арифметика

var n = 2;
n = n + 5;
n = n * 2;
var n = 2;
n += 5; // теперь n=7 (работает как n = n + 5)
n *= 2; // теперь n=14 (работает как n = n * 2)

alert( n ); // 14

Оператор запятая

var a = (5, 6);

alert( a );

// три операции в одной строке
for (a = 1, b = 3, c = a*b; a < 10; a++) {
 ...
}

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

Операторы сравнения

  • Больше/меньше: a > b, a < b.
  • Больше/меньше или равно: a >= b, a <= b.
  • Равно a == b. Для сравнения используется два символа равенства '='. Один символ a = b означал бы присваивание.
  • «Не равно». В математике он пишется как ≠, в JavaScript — знак равенства с восклицательным знаком перед ним !=.

Сравнение строк

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

 

alert( 'Б' > 'А' ); // true

'a'.charCodeAt(0); //97

Сравнение разных типов

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

 



'2' > 1; // true, сравнивается как 2 > 1
'01' == 1; // true, сравнивается как 1 == 1
false == 0; // true, false становится числом 0
true == 1; // true, так как true становится числом 1.

Строгое равенство

Для проверки равенства без преобразования типов используются операторы строгого равенства

=== (тройное равно) и !==.


0 === false; // false, т.к. типы различны

Сравнение с null и undefined

  1. Значения null и undefined равны == друг другу и не равны чему бы то ни было ещё. Это жёсткое правило буквально прописано в спецификации языка.
  2. При преобразовании в число null становится 0, а undefined становится NaN.
null > 0; // false       undefined > 0; // false
null == 0; // false      undefined < 0; // false
null >= 0; // true      undefined == 0; // false

Значение undefined вообще нельзя сравнивать:

alert( undefined > 0 ); // false (1)
alert( undefined < 0 ); // false (2)
alert( undefined == 0 ); // false (3)

Условные операторы: if, '?'

Оператор if (...) вычисляет и преобразует выражение в скобках к логическому типу.

В логическом контексте:
Число 0, пустая строка "", null и undefined, а также NaN являются false,
Остальные значения — true.


Неверное условие, else

Необязательный блок else («иначе») выполняется, если условие неверно

var year = prompt('В каком году появилась спецификация ECMA-262 5.1?', '');

if (year != 2011) alert( 'А вот и неправильно!' );

Несколько условий, else if

Бывает нужно проверить несколько вариантов условия. Для этого используется блок else if.
JavaScript сначала проверит первое условие, если оно ложно — перейдет ко второму — и так далее, до последнего else.

 


var year = 2015;
if (year < 2015) {
  alert('Это слишком рано...');
} else if (year > 2015) {
  alert('Это поздновато...');
} else {
  alert('OK!');
}

«Тернарный оператор»
вопросительный знак '?'

Вопросительный знак — единственный оператор, у которого есть аж три аргумента, в то время как у обычных операторов их один-два. Поэтому его называют «тернарный оператор».
Последовательность операторов '?' позволяет вернуть значение в зависимости не от одного условия, а от нескольких.


var count = 2;
var text = count == 1 ? 'Apple' : 'Apples';

Логические операторы

Для операций над логическими значениями в JavaScript есть:
|| (ИЛИ), && (И) и ! (НЕ).

|| (ИЛИ)
Оператор ИЛИ вычисляет ровно столько значений, сколько необходимо — до первого true.
&& (И)
При этом оператор ИЛИ возвращает то значение, на котором остановились вычисления. Причём, не преобразованное к логическому типу.
И возвращает true, если оба аргумента истинны, а иначе — false
! (НЕ)
Сначала приводит аргумент к логическому типу true/false.
Затем возвращает противоположное значение.

 

Что возвращают и как работаю

логические операторы

  1. || запинается на «правде», && запинается на «лжи».
  2. || - возвращает то значение, на котором остановились вычисления. Причём, не преобразованное к логическому типу.
    Если все значения «ложные», то || возвратит последнее из них.
  3. && - Если левый аргумент – false, оператор И возвращает его и заканчивает вычисления. Иначе – вычисляет и возвращает правый аргумент.

 

Приоритет оператора И && больше, чем ИЛИ ||, так что он выполняется раньше.

alert( 5 || 1 && 0 ); // 5

Преобразование типов
для примитивов

Всего есть три преобразования:

  1. Cтроковое преобразование.
  2. Числовое преобразование.
  3. Преобразование к логическому значению.

Строковое преобразование

Строковое преобразование происходит, когда требуется представление чего-либо в виде строки.


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

 

alert( true + "test" ); // "truetest"
alert( "123" + undefined ); // "123undefined"

alert( String(null) === "null" ); // true

Численное преобразование


Значение


undefined


null


true / false


Строка

 


Преобразуется в…


NaN


0


1 / 0


Пробельные символы по краям обрезаются. Далее, если остаётся пустая строка, то 0, иначе из непустой строки «считывается» число, при ошибке результат NaN.

 

var a = +"123"; // 123
var a = Number("123"); // 123, тот же эффект

Логическое преобразование


Значение


undefined, null


Числа


Строки



Объекты

 

 


Преобразуется в…


false


Все true, кроме 0, NaN — false.


Все true, кроме пустой строки "" — false


Всегда true

 

 

Boolean(null); // false
Boolean("string"); // false

Итого

В JavaScript есть три преобразования:

  1. Строковое: String(value) – в строковом контексте или при сложении со строкой. Работает очевидным образом.
  2. Численное: Number(value) – в численном контексте, включая унарный плюс +value. Происходит при сравнении разных типов, кроме строгого равенства.
  3. Логическое: Boolean(value) – в логическом контексте, можно также сделать двойным НЕ: !!value.

 

Конструкция switch

Конструкция switch заменяет собой сразу несколько if.

switch (a) {
  case 2:
  case 3:
    doSomething();
    break;
  case 4:
    doSomethingElse();
    break;
  default:
    alert('Я таких значений не знаю');
    break;
}

Циклы while, for


var i = 0;
while (i < 3) {
  alert( i );
  i++;
}

var i = 0;
do {
  alert( i );
  i++;
} while (i < 3);

Цикл for



var i;

for (i = 0; i < 3; i++) {
  alert( i );
}

Прерывание цикла: break


var sum = 0;
var value = 0;
while (true) {
  if (!value) break;

  sum += value;
}

Следующая итерация: continue


for (var i = 0; i < 10; i++) {

  if (i % 2 == 0) continue;

  alert(i);
}

Методы и свойства

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

 

Такие функции называют «методами», а значения — «свойствами». Здесь мы рассмотрим основы использования свойств и методов.



// Строки
var str = 'Hello world!';
alert(str.length); // 12
alert(str.toUpperCase()); // "HELLO WORLD!"

// Числа
var n = 12.345;
alert(n.toFixed(2)); // "12.35"
alert(n.toFixed(0)); // "12"
alert(n.toFixed(5)); // "12.34500"

alert(12.toFixed(1)); // ошибка!
alert(12..toFixed(1)); // 12.0

Строки. Спец. символы


// Спец. символ - перенос на новую строку
alert('Привет\nМир'); /* выведет "Мир"
                           на новой строке */

// Экранирование специальных символов
var str = 'I\'m a JavaScript programmer';
var str = "I'm a JavaScript \"programmer\" ";
var str = ' символ \\ '; // символ \

// Длина и доступ к символам

var str = "jQuery";

alert(str.length); // 6

alert(str.charAt(0)); // "j"
alert(str[0]); // "j"

// Смена регистра

alert('Javascript'.toUpperCase()); // JAVASCRIPT
alert('USSR'.toLowerCase()); // ussr

// Поиск подстроки

alert(str.indexOf("j") ); // 0
alert(str.indexOf("Query") ); // 1
alert(str.indexOf("query") ); // -1

Взятие подстроки


var string = 'check it out';

alert(string.substring(1)); // 'heck it out'
alert(string.substring(0, 3)); // 'che'

alert(string.substr(1)); // 'heck it out'
alert(string.substr(0, 3)); // 'che'
  • substring(start [, end]) - возвращает подстроку с позиции start до, но не включая end. (slice)
  • substr(start [, length]) - аналогично, только второй параметр не коне, а количество символов.

Числа. Способы записи



alert(0xFF); // 255 в шестнадцатиричной системе
alert(010); // 8 в восьмеричной системе

// еще пример научной формы: 3 с 5 нулями
alert(3e5); // 300000

// здесь 3 сдвинуто 5 раз вправо, за десятичную точку.
alert(3e-5); /* 0.00003  <-- 5 нулей,
                включая начальный ноль */

Infinity



alert(12345 / 0); // Infinity
alert(Infinity > 1234567890); // true
alert(Infinity + 5 == Infinity); // true
alert(-1 / 0); // -Infinity

NaN


alert(0 / 0); // NaN
alert(NaN == NaN); // false
alert(NaN === NaN); // false

var n = 0 / 0;
alert(isNaN(n)); // true

// Забавный способ проверки на NaN
alert(n !== n) // true
  • Значение NaN «прилипчиво». Любая операция с NaN возвращает NaN.
  • Математические операции в JS безопасны.

Преобразование к числу


alert(+"12"); // 12
alert(+"12test"); // NaN
alert(+"  -12"); // -12
alert(+" \n34  \n"); /* 34, перевод строки \n 
                        является пробельным символом */
alert(+""); // 0, пустая строка становится нулем
alert(+"1 2"); // NaN, пробел посередине числа - ошибка

alert("12.34" / "-2"); // -6.17
  • Пробельные символы в начале и в конце строки игнорируются.
  • Преобразование к числу происходит в любых математических операциях и функциях

parseInt и parseFloat


alert(parseInt('12px')); // 12
alert(parseFloat('12.3.4')) /* 12.3, ошибка 
                               на второй точке */
alert(parseInt('a123')); // NaN

Функция parseInt и ее аналог parseFloat преобразуют строку символ за символом, пока это возможно.​

Округление


alert(Math.floor(3.1));  // 3
alert(Math.ceil(3.1));   // 4
alert(Math.round(3.1));  // 3
alert(Math.round(3.5));  // 4

Math.floor

Округляет вниз

Math.ceil

Округляет вверх

Math.round

Округляет до ближайшего целого

Округление до заданной точности

var n = 9.34;
alert( n.toFixed(1) ); // "9.3"


var n = 13.36;
alert( n.toFixed(1) ); // "13.4"


var n = 8.24;
alert( n.toFixed(5) ); // "8.24000", добавлены нули до 5 знаков после запятой

Функции общего назначения

Math.sqrt(x) Возвращает квадратный корень из x.

Math.log(x) Возвращает натуральный (по основанию e) логарифм x.

Math.pow(x, exp) Возводит число в степень, возвращает xexp, например Math.pow(2,3) = 8. Работает в том числе с дробными и отрицательными степенями, например: Math.pow(4, -1/2) = 0.5.

Math.abs(x) Возвращает абсолютное значение числа

Math.exp(x) Возвращает ex, где e – основание натуральных логарифмов.

Math.max(a, b, c...) Возвращает наибольший из списка аргументов

Math.min(a, b, c...) Возвращает наименьший из списка аргументов

Math.random() Возвращает псевдо-случайное число в интервале [0,1) – то есть между 0(включительно) и 1(не включая). Генератор случайных чисел инициализуется текущим временем.

Итого

  • Числа могут быть записаны в шестнадцатиричной, восьмеричной системе, а также «научным» способом.
  • В JavaScript существует числовое значение бесконечность Infinity.
  • Ошибка вычислений дает NaN.
  • Арифметические и математические функции преобразуют строку в точности в число, игнорируя начальные и конечные пробелы.
  • Функции parseInt/parseFloat делают числа из строк, которые начинаются с числа.
  • Есть четыре способа округления: Math.floor, Math.round, Math.ceil и битовый оператор. Для округления до нужного знака используйте +n.toFixed(p) или трюк с умножением и делением на10p.
  • Дробные числа дают ошибку вычислений. При необходимости ее можно отсечь округлением до нужного знака.
  • Случайные числа от 0 до 1 генерируются с помощью Math.random(), остальные – преобразованием из них.

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

By Alexey Kalyuzhnyi

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

  • 3,300