# LEC 4. Java-bruh-script ## History При разработке отталкивался от языков: - Self - диалект Small Talk (первый ООП-подобный язык) - Scheme - функциональное программирование ## Особенности - Мультпарадигменность - Динамическая типизация - Автоматическая работа с памятью и сборка мусора ## Лексическая структура - Unicode - Чувствительность к регистру - Комментарии в C++ style - Необязательность к ; ## Типы данных Простейшие типы: - number (8 byte) - string - boolean Тривиальные типы: - null - undefined Составные типы: - object - array (type of object) Специальные типы: - functions - Стандартные классы - Date - RegExp - Error - Math ## Проверка на равенство и идентичности в JS === - идентичность - максимально строгое сравнение == - равенство - допустимо приведение типов - null and undefined - равны - string -> number ## Преобразование типов - string (String, toString, toFixed, toExponential, toPrecision) - number (Number, parseInt, parseFloat) - default ## Функции ```js function someFunc(x, y, z){ if (x === undefined){ x = 1; } y = y || 555; var a = 25; return x * y + z / a; } ``` или ```js var someFunc = function(x) {return x * x;} ``` или ```js var f = function fact(n){ return n > 1 ? n * fact(n-1) : 1; }; ``` или ```js var arr = [1,2,3]; arr.sort(function(left, right) { return right - left; }); ``` или если хочется взлома ~~жопы~~ ```js var square = new Function("x", "return x * x;"); ``` ## Объекты ### Создание ```js var obj1 = new Object() var obj = {}; var obj3 = {a: 100;}; ``` ### Свойства - Ключ-строка - Значение - любой тип данных, включая объект - Флаги: writable, enumerable, configurable ### Удаление объекта ```js delete obj.prop1; ``` ### Проверка существования свойства ```js if ('prop1' in obj){} if (obj.prop1 === undefined){} if (obj.hasOwnProperty('prop1')){} ``` ### Доступ к свойствам ```js obj.prop1 obj['prop-2'] obj[p] ``` ### Перебор свойств объекта ```js for (var key in obj) {}; Object.keys(obj); ``` ## Массивы ### Создание массива ```js var a = new Array(1.2, "text", true, {x:1}); var b = new Array(10); // массив из undefined var c = []; c[0] = 1; ``` ### Fun work ```js var arr = []; arr[10]= 'hi'; console.log(arr.length); // 11 ``` ### Методы массивов - Добавление/удаление - pop/push (конец) - shift/unshift (начало) - Преобразование из строки в массив - split - join - slice - splice - sort