Типы Данных
Типы Данных, 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)
- Синтаксис оператора: typeof x.
- Синтаксис функции: typeof(x).
Основные операторы: терминология
- Операнд – то, к чему применяется оператор. Например: 5 * 2 – оператор умножения с левым и правым операндами. Другое название: «аргумент оператора».
- Унарным называется оператор, который применяется к одному выражению. Например, оператор унарный минус "-" меняет знак числа на противоположный:
- Бинарным называется оператор, который применяется к двум операндам. Тот же минус существует и в бинарной форме:
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
- Значения null и undefined равны == друг другу и не равны чему бы то ни было ещё. Это жёсткое правило буквально прописано в спецификации языка.
- При преобразовании в число 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.
Затем возвращает противоположное значение.
Что возвращают и как работаю
логические операторы
- || запинается на «правде», && запинается на «лжи».
-
|| - возвращает то значение, на котором остановились вычисления. Причём, не преобразованное к логическому типу.
Если все значения «ложные», то || возвратит последнее из них. - && - Если левый аргумент – false, оператор И возвращает его и заканчивает вычисления. Иначе – вычисляет и возвращает правый аргумент.
Приоритет оператора И && больше, чем ИЛИ ||, так что он выполняется раньше.
alert( 5 || 1 && 0 ); // 5
Преобразование типов
для примитивов
Всего есть три преобразования:
- Cтроковое преобразование.
- Числовое преобразование.
- Преобразование к логическому значению.
Строковое преобразование
Строковое преобразование происходит, когда требуется представление чего-либо в виде строки.
В случае сложения, если один из аргументов строка, второй аргумент преобразовывается в строку.
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 есть три преобразования:
- Строковое: String(value) – в строковом контексте или при сложении со строкой. Работает очевидным образом.
- Численное: Number(value) – в численном контексте, включая унарный плюс +value. Происходит при сравнении разных типов, кроме строгого равенства.
- Логическое: 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,424