Типы данных и переменные

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

Тип данных: Множество значений и операций на этих значениях; Определенный тип данных хранимый в ячейках памяти компьютера

JavaScript слабо типизированый язык

  • Позволяет выполнять большинство операций над данными без обьявления их типа
  • Значения имеют тип, переменные нет
  • Переменные могут хранить любые типы данных
  • Все переменные определяются с помошью предикаторов var, let или const
var count = 5; // переменая хранит целочисленный тип
count = 'привет'; // теперь хрнит строку

var name = 'Курс JavaScript'; // переменная хранит строку

let mark = 5.25 // переменная хранит число с плавающей точкой
mark = true; // тперь хранит булево значение

const MAX_COUNT = 250; // константа хранит число
MAX_COUNT = 0; // ошибка переназначения значения константы

Переменные в JavaScript

Переменная это: Поименованная область в памяти, которая может быть изменеа в процессе выполнения программы

Переменные позволяют:

  • Хранить информацию
  • Извлекать информацию
  • Манипулировать информацией
let counter = 5;

Числа в JavaScript

  • Все числа в JavaScript хранятся в виде чисел с плавающей запятой двойной точности
  • В соответствии с IEEE-754 стандартом
    • Могут быть представлены как объект с типом Number
let value = 5;
value = 3.14159;
value = new Number(100); // Number { 100 }
value = value + 1; // 101
let biggestNum = Number.MAX_VALUE;

Изменения типов номеров

  • Перевод floating-point в integer числа
let valueDouble = 8.75;
let valueInt = valueDouble | 0; // 8
  • Конвертация в integer с помощью округления
let valueDouble = 8.75;
let roundedInt = (valueDouble + 0.5) | 0; // 9
  • Конвертация string в integer
let str = '1234';
let i = str | 0 + 1; // 1235

Целочисленный тип

  • Находится в диапазоне значений, в зависимости от размера ячейки памяти
  • Целые значения может содержать цифры от ` -9007199254740992 до 9007199254740992`
  • Их их базовым типом является число с плавающей точкой ( IEEE-754 )

In [ ]:
'use strict';
var studentsCount = 5;
console.log('studentsCount is: ' + studentsCount);

In [ ]:
var maxInteger = 9007199254740991;
console.log('max precise integer is: ' + maxInteger);

In [ ]:
var minInteger = -9007199254740991;
console.log('min precise integer is: ' + minInteger);

In [ ]:
var greaterThanMax = maxInteger + 1;
console.log('is maxInteger + 1 possible?  ' + greaterThanMax);

In [ ]:
var maxIntMult33 = maxInteger * 33;
console.log('maxInteger * 33 is: ' + maxIntMult33);
// Потерянная точность. Корректное значение 297237575406452736

Числа с плавающей точкой

  • Является диапазонами всех действительных чисел
  • Могут быть заданы с точностью до определенного количества знаков после точки
  • Могут вести себя ненормально при вычислениях

In [ ]:
var PI = Math.PI; // 3.141592653589793
console.log('PI = ' + PI);

In [ ]:
var minValue = Number.MIN_VALUE;
console.log('Number.MIN_VALUE = ' + minValue);

In [ ]:
var maxValue = Number.MAX_VALUE;
console.log('Number.MAX_VALUE = ' + maxValue);

In [ ]:
var div0 = PI / 0; // Infinity
console.log('PI / 0 = ' + div0);

In [ ]:
var divMinus0 = -PI / 0; // -Infinity
console.log('-PI / 0 = ' + divMinus0);

In [ ]:
var unknown = div0 / divMinus0; // NaN - не число
console.log('Infinity / -Infinity = ' + unknown);

In [ ]:
var eps = Number.EPSILON;  
// Свойство Number.EPSILON представляет собой разницу между единицей и 
//наименьшим значением, большим единицы, которое может быть представлено типом Number
console.log('Number.EPSILON = ' + eps);

ненормальность чисел с плавающей точкой

  • Иногда могут наблюдаться отклонения при использовании чисел с плавающей точкой
  • Сравнение чисел с плавающей точкой не может быть выполнена непосредственно с применением операторов эквивалентности (==и===)

In [ ]:
console.log('');

var a = 0.1,
    b = 0.2,
    sum = 0.3,
    equal = (a + b == sum); // false

console.log('a = ' + a);
console.log('b = ' + b);
console.log('a+b = ' + (a + b));
console.log('sum = ' + sum);
console.log('sum == a+b? is ' + equal);

Тип булев (логический)

  • Содержит два возможных состояния:
    • true and false
  • Используется в логических выражениях

In [ ]:
var a = 1;
var b = 2;

var greaterAB = (a > b);
console.log(`1 > 2 ? ${greaterAB}`); // false

var equalA1 = (a === 1);
console.log(`1 == 1 ? ${equalA1}`); // true	

console.log(true, false);

Строковый тип

  • Представлен в виде последовательности символов
  • Строки должны быть заклюбчены в кавычки:
    • Оба ' , " работают корректно
    • ES6 так же включает ` (ticks) для перевода в строчный тип
  • Строки могут склеиваться
    • Используется оператор +

In [ ]:
// Различные кавычки могут быть применены для инициализации переменных - двойная, одинарная и обратная
var firstName = 'Иван',
    middleName = `Федорович`,
    lastName = "Иванов";
    
console.log("Привет, " + firstName + "!");

var fullName = lastName + ' ' + firstName + ' ' + middleName;
console.log('Ваше полное имя ' + fullName); // create a string using concatenation
console.log(`Ваше полное имя ${fullName}`); // create a string using string interpolation

console.log(`Сумма 123, 456 и 879 ${123 + 456 + 879}`);

var asSalamuAlaykum = 'السلام عليكم';
console.log(asSalamuAlaykum);

var кирилица = 'Това е на кирилица!';
console.log(кирилица);

var leafJapanese = '葉'; // Pronounced as 'ha'
console.log(leafJapanese);

Приведение численных типов


In [ ]:
var fractionalNumber = 8.75;
var truncated = fractionalNumber | 0,
    truncated2 = Math.trunc(fractionalNumber);

console.log('Дробное число = ' + fractionalNumber);
console.log('Разделенное с помощью | = ' + truncated);
console.log('Разделенное с помощью Math.trunc = ' + truncated2);

fractionalNumber = 8.75;
var roundedInt = (fractionalNumber + 0.5) | 0;
var rounderInt2 = Math.round(fractionalNumber);

console.log('Дробное число = ' + fractionalNumber);
console.log('округленное с помощью | = ' + roundedInt);
console.log('округленное с помощью Math.round = ' + rounderInt2);

Конвертация строки в число


In [ ]:
var numAsString = '1234';

console.log(parseInt(numAsString) + 1);
console.log(parseFloat(numAsString) + 1);
console.log(+numAsString + 1);
console.log(numAsString * 1 + 1);
console.log((numAsString | 0) + 1);
console.log(Number(numAsString) + 1)

In [ ]:
var invalidNumString = '435javascript';
console.log(parseInt(invalidNumString) + 1); //будет вычеслено как - 435
console.log(+invalidNumString); // NaN
console.log(Number(invalidNumString)); // NaN

In [ ]:
var fractionString = '3.65';
console.log(parseFloat(fractionString) + 1);
console.log(Number(fractionString) + 1);
console.log(+fractionString + 1);

Undefined (неопределенные) and Null (нулевые) значения

JavaScript имеет специальное значение undefined, оно означает что переменная не определена (ее не существует в текущем контексте), undefined не одно и тоже что и null, который представляет нулевое значение.


In [ ]:
var x = 5;
console.log('x = ' + x + ', typeof(x) = ' + typeof(x));

x = 3.14159;
console.log('x = ' + x + ', typeof(x) = ' + typeof(x));

x = undefined;
console.log('x = ' + x + ', typeof(x) = ' + typeof(x));

x = null;
console.log(`x = ${x}; typeof x = ${typeof x}`);

x = 'hello';
console.log(`x = ${x}; typeof x = ${typeof x}`);

x = new Number(5);
console.log(`x = ${x}; typeof x = ${typeof x}`);

Объявление и использование переменных

Когда мы декларируем переменную мы

  • Специфизируем имя (идентификатор переменней)
  • Можем заполнить инициализирующим значением
<var | let | const> <identifier> [= <initialization>];
let emptyVariable;
var height = 200;
let width = 300;
const depth = 250;

Правила именования идентификаторов

  • Буквы (Unicode)
  • Цифры [0-9]
  • Нижнее подчеркивание '_'
  • Доллар '$'
  • Не могут начинаться с цифр, и быть зарезервированными JavaScript словами
  • Переменные и названия функций правильно именовать стилем camelCase

Идентификатор может быть описательными именем, рекомендуется применять латинскую кодировку, JavaScript регистрозависимый язык

Присвоение значений переменным

  • Присвоение значений переменным производится с помошью оператора =
  • Присвоение может быть каскадным, когда следующая переменная приравнивается к предыдущей
  • Переменные декларированные const не могут быть переопределены дргим значением
let firstValue = 5;
let secondValue;
let thirdValue;

// Используем уже декларированную переменную:
secondValue = firstValue;

// Каскадное присваивание

thirdValue = firstValue = 3; // Avoid this!

Инициализация переменных

  • Знавение должно быть проинициализировано до использования переменной
  • Может инициализироваться уже проинициализированной переменной
  • Неициализированные переменные неопределены undefined
let heightInMeters = 1.74;

let greeting = 'Hello World!';
let message = greeting;

const parsedNumber = parseInt('1239') + 1;

Локальные и глобальные переменные

  • Локальные переменные могут быть определены с помшью ключевых слов var, let или const
    • var - время жизни переменной определено в пространстве текущей функции или глобальном пространстве
    • let - время жизни переменной в текущем пространстве
    • const - такое же как let, но не может быть переопределено
  • глобальные переменные
    • Определяются без ключевых слов
    • Плохая практика не делайте так!
let a = 5; // a в локальной области видимости
a = 'блаблабла'; // так же упонимается здесь
a = undefined;
a = 5; // то же что и window.a

In [ ]:
// Не рекомендуется но не приведет к ошибке
var New = 2; 
var _2Pac; 

var greeting = "Hello";
var n = 100; 

//const numberOfClients = 100; 

var numberOfPrivateClientOfTheFirm = 100;

// Вызовет ошибку
// numberOfClients = 200; // не может быть использовано для переменной типа const
// numberOfClients += 10; // не может быть использовано для переменной типа const

imGlobalVariable = 'Such global, much famous'; // глобальные переменые вызывают ошибку при использовании 'use strict'

// let 2Pac = '2Pac'; // invalid identifier

In [ ]: