Типи даних JavaScript

Примітивні

1. Число:
document.write(1005) - записано у вигляді константи
document.write(10 + 0.5) - записано у вигляді сумми констант
document.write(a1) - записано за допомогою змінної а1
document.write(2/0); - нескінченність теж число
2. Рядок
document.write("10 + 0.5") - записано в подвійных лапках
document.write('10 + 0.5') - записано в одинарних лапках
document.write(a2) - записано за допомогою змінної а2
document.write("10 " + "+ 0.5") - записано у вигляді суми двох рядків
3. Логічні:
document.write(10 > 0.5); - записано в найпростішому вигляді
document.write(Boolean(10 > 0.5)); - записано за допомогою функиції Boolean()
document.write(Boolean(-15)+"; "+Boolean("false")); - будь-яке значення відмінне від 0 має логічне значення true
document.write(Boolean(-0)); - значеня false мають: false; 0; -0; ""; undefined; null; NaN
document.write(2 < "12"); - при порівнянні рядка та числа JavaScript буде перетворювати рядок на числове значення
document.write("2" < "12"); - "2" не менше "12", тому що в алфавітній послідовності 1 менше 2
document.write(0 == "John"); - не числовий рядок перетворюється на значення NaN
(12 < 2) ? "да" : "нэт" - yмовний (тернарний) оператор: true -> "так", false -> "ні"
Нехай var x = false, var y = new Boolean(false), var z = new Boolean(false)
document.write(x == y); - при використанні оператора порівняння == однакові значення типу Boolean рівні
x === y - не рівні, тому що оператор === очікує збігу як за значенням, так і за типом
y == z - Порівняння двох об'єктів JavaScript завжди повертає false
4. Функція. По суті це константне значення
document.getElementById("temp1").innerHTML = toCelsius; - виклик функції без скобок
document.getElementById("temp2").innerHTML = toCelsius(); - виклик функції зі скобками
var temperature = toCelsius(40);
var itIs = "The temperature is " + temperature + "F";
document.getElementById("temp3").innerHTML = itIs;
- виклик функції як значення змінної
ECMAScript 6 (2015)
function myFunction(x, y = 10) {
return x + y;}
myFunction(5);
- y дорівнює 10 якщо не передано значення або undefined
const x = (x, y = 10) => x + y; - "стрілочні" функції надають короткий запис для виразів-функцій; якщо функція складається з більш ніж одного виразу, потрібні фігурні дужки
const x = (x, y) => {return x + y}; - гарною звичкою буде писати так
5. null
6. undefined

Змінні

1. Змінні
var x = 10.05;
document.write(x);
- привласнення значення змінній
2. Об'єкт
var object = {
firstName: "Ivan",
lastName: "Ivanov"
fullName : function(){
    return this.firstName + " " + this.lastName;
   }
};
document.write(object.firstName + " " + object.lastName);
- створення об'єкта за допомогою об'єктного літералу
var object = new Object();
object.firstName = "Ivan";
object.lastName = "Ivanov";
- створення об'єкта за допомогою ключового слова new
var x = object;
x.firstName = "Petro";
document.write(object.firstName);
- Об'єкт x це не копія об'єкта object. Це і об'єкт object. І x, і object – один і той самий об'єкт
object.firstName - звернення до елементів об'єкта;
- доступ до властивостей объекта
object["lastName"]
object.firstName + " " + object.lastName - Властивість об'єкта - це пари "ім'я:значення"
object.fullName() - Метод об'єкта - це функція, записана як властивість об'єкта;
- це дії, які можна виконати з об'єктами
ECMAScript 5 (2009)
Нехай var person = {firstName: "Ivan", lastName: "Ivanov", language: "NO"}
Object.create(){
 firstName: "Ivan",
 lastName : "Ivanov"
}
- створення об'єкта за допомогою функції
get fullName(){
 return this.firstName + " " + this.lastName;
}
- створення в об'єкті геттера з ім'ям fullName
set lang(value){
 this.language = value.toUpperCase();
}
- створення в об'єкті сеттера з ім'ям lang, який допомагає ставити одну з властивостей цього об'єкта
get lang() {
 return this.language;
},
set lang(value) {
 this.language = value;
}
- створення в об'єкті сеттера та геттера з ім'ям lang
Object.defineProperty(person, "language", {
 value: "EN",
 writable : true});
- визначення властивості об'єкта та/або зміна значення властивості та/або його метаданих
Object.getOwnPropertyDescriptor(person, "language") - доступ до властивостей
Object.getPrototypeOf(person) - доступ до прототипу
Object.getOwnPropertyNames(person) - повертає всі властивості у вигляді масиву
Object.keys(person) - - повертає всі перераховані властивості у вигляді масиву

Перетворення типів JavaScript

В рядок
document.write(String(123)+"; "+typeof(String(123))); - перетворює в рядок константу 123
String(100+23) - перетворює в рядок результат виразу
String(x) - перетворює в рядок числову змінну x
В число
Number("3.14") - перетворює рядок, що містить числа, в число
Number("99 88"); Number(" ") - перетворює рядок, який містить нечислові символи або який порожній, на число
Number(true) - перетворення логічних значень у числа
Number(new Date()) - перетворення значення дати (тип Date) у числа

Арифметика JavaScript

document.write(4 + 6 + 0.5) - сума чисел
document.write("4 +" + " 6 +" + ' 0.5') - сума рядків
document.write(4 + " + 6 +" + ' 0.5') - сума чисел і рядків
document.write(a1 + " + " + a2 + " + " + a3) - сума змінних
document.write(a1 + " + " + a2 + " + " + a3) - більш точна сума чисел із плаваючою комою
document.write(b1!==b2); document.write(b1==b2) - порівняння
ECMAScript 6 (2015)
document.write(5 ** 2) - Оператор зведення в ступінь; дає той же результат, що і використання методу Math.pow(x,y)
Побітові операції
5 = 0101; 1 = 0001
& - побітове "і" - повертає 1, яущо обидва біти дорівнюють 1
| - побітове "або" - повертає 1, якщо хоча б один іх двох бітів дорівнює 1
^ - виключне "і" - повертає 1, якщо тільки один із двох бітів дорівнює 1, але не обидва
~ - побітове "ні" - інвертує всі біти
<< - зрушення вліво із заповненням молодших (праворуч) бітів нулями
>> - зсув праворуч з копіюванням знака (арифметичний зсув праворуч); порожні біти заповнюються копією крайнього лівого біта
>>> - зсув вправо із заповненням старших (ліворуч) бітів нулями
Оператори JavaScript
- Арифметичні
- Логічні
- Побітові
- Присвоєння
- Порівняння

Оператори типів

typeof(6) - тип = число
typeof('a') - тип = рядок
typeof(object) - тип = об'єкт
typeof(true) - тип = логічний
typeof(function myFunc(){}) - тип = функція
typeof(em) - у невизначеної змінної тип = undefined
typeof(null) - у "null" тип = об'єкт
typeof(Infinity) - у нескінченності тип = число
typeof(NaN) - NaN теж число
typeof(new String()) - у рядків, масивів та іншого, що створене за допомогою "new", тип = об'єкт
"John".constructor - повертає функцію-конструктор у всіх змінних JavaScript
(3.14).constructor
false.constructor
[0,1,2].constructor
{name:"John", age: 34}.constructor
new Date().constructor
function(){}.constructor
instanceof(d) - instanceof
ECMAScript 6 (2025)
isFinite(Infinity); isFinite(-0.5) - повертає false, якщо його параметр має тип Infinity чи NaN
isNaN("Hello"); isNaN(5); isNaN("5") - повертає true, якщо параметр має тип NaN
ECMAScript 5 (2009). Строгий режим
"use strict";
x = 3.14;
document.write(typeof(x));
- декларування строгого режиму; у строгому режимі недекларовані змінні не створюються автоматично
x = 3.14;
function myFunc(){
"use strict";
y = 3.14; }
document.write(typeof(x) + "; " + typeof(y));
- декларування строгого режиму усередині блоку