├── .gitignore ├── 01_types.js ├── 02_values.js ├── 03_scope.js ├── 04_hoisting.js ├── 05_let_const.js ├── 06_closures.js ├── 07_iife.js ├── 08_context.js ├── 09_new.js ├── 10_prototypes.js └── 11_async.js /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | -------------------------------------------------------------------------------- /01_types.js: -------------------------------------------------------------------------------- 1 | // null, undefined, boolean, number, string, object, symbol 2 | 3 | // console.log(typeof 0) 4 | // console.log(typeof true) 5 | // console.log(typeof 'Javascript') // "", '', `` 6 | // console.log(typeof undefined) 7 | // console.log(typeof Math) 8 | // console.log(typeof Symbol('JS')) 9 | // console.log(typeof null) 10 | // console.log(typeof function() {}) 11 | // console.log(typeof NaN) 12 | 13 | // Приведение типов 14 | // let language = 'JavaScript' 15 | // if (language) { 16 | // console.log('The best language is: ', language) 17 | // } 18 | 19 | // '', 0, null, undefined, NaN, false 20 | // console.log(Boolean('')) 21 | // console.log(Boolean('Hello')) 22 | // console.log(Boolean(' ')) 23 | // console.log(Boolean('0')) 24 | // console.log(Boolean(0)) 25 | // console.log(Boolean(null)) 26 | // console.log(Boolean([])) 27 | // console.log(Boolean({})) 28 | // console.log(Boolean(function(){})) 29 | 30 | // Строки и числа 31 | // console.log(1 + '2') // string 12 32 | // console.log('' + 1 + 0) 33 | // console.log('' - 1 + 0) 34 | // console.log('3' * '8') // number 35 | // console.log(4 + 10 + 'px') 36 | // console.log('px' + 5 + 10) // string 37 | // console.log('42' - 40) 38 | // console.log('42px' - 2) 39 | // console.log(null + 2) 40 | // console.log(undefined + 42) 41 | 42 | // == vs === 43 | // console.log(2 == '2') 44 | // console.log(2 === '2') 45 | // console.log(undefined == null) 46 | // console.log(undefined === null) 47 | // console.log('0' == false) 48 | // console.log('0' == 0) 49 | // console.log(0 == 0) 50 | 51 | // ===== 52 | console.log(false == '') 53 | console.log(false == []) 54 | console.log(false == {}) 55 | console.log('' == 0) 56 | console.log('' == []) 57 | console.log('' == {}) 58 | console.log(0 == []) 59 | console.log(0 == {}) 60 | console.log(0 == null) 61 | 62 | -------------------------------------------------------------------------------- /02_values.js: -------------------------------------------------------------------------------- 1 | // let a = 42 2 | // let b = a 3 | // b++ 4 | // console.log('a', a) 5 | // console.log('b', b) 6 | 7 | let a = [1, 2, 3] 8 | let b = a 9 | b.push(4) 10 | 11 | let c = [1, 2, 3, 4] 12 | 13 | console.log('a', a) 14 | console.log('b', b) 15 | 16 | console.log(a === b) 17 | console.log(a === c) 18 | -------------------------------------------------------------------------------- /03_scope.js: -------------------------------------------------------------------------------- 1 | function funcA() { 2 | let a = 1 3 | 4 | function funcB() { 5 | let b = 2 6 | 7 | function funcC() { 8 | let c = 3 9 | 10 | console.log('funcC:',a, b, c) 11 | } 12 | 13 | funcC() 14 | console.log('funcB:', a, b) 15 | } 16 | 17 | funcB() 18 | console.log('funcA:', a) 19 | } 20 | 21 | funcA() 22 | -------------------------------------------------------------------------------- /04_hoisting.js: -------------------------------------------------------------------------------- 1 | // console.log(sum(1, 41)) 2 | // 3 | // function sum(a, b) { 4 | // return a + b 5 | // } 6 | 7 | // var i 8 | // console.log(i) 9 | // i = 42 10 | // console.log(i) 11 | 12 | // console.log(num) 13 | // let num = 42 14 | // console.log(num) 15 | 16 | // Function Expression & Function Declaration 17 | 18 | 19 | // function square(num) { 20 | // return num ** 2 21 | // } 22 | 23 | var square = function(num) { 24 | return num ** 2 25 | } 26 | 27 | console.log(square(25)) 28 | -------------------------------------------------------------------------------- /05_let_const.js: -------------------------------------------------------------------------------- 1 | // Let 2 | // let a = 'Variable a' 3 | // let b = 'Variable b' 4 | // { 5 | // a = 'New Variable A' 6 | // let b = 'Local Variable B' 7 | // console.log('Scope A', a) 8 | // console.log('Scope B', b) 9 | // // console.log('Scope C', c) 10 | // // let c = 'Something' 11 | // } 12 | // console.log('A:', a) 13 | // console.log('B:', b) 14 | 15 | // Const 16 | const PORT = 8080 17 | const array = ['Javascript', 'is', 'Awesome'] 18 | array.push('!') 19 | array[0] = 'JS' 20 | console.log(array) 21 | 22 | const obj = {} 23 | obj.name = 'Vladilen' 24 | obj.age = 26 25 | 26 | console.log(obj) 27 | 28 | delete obj.name 29 | 30 | console.log(obj) 31 | 32 | -------------------------------------------------------------------------------- /06_closures.js: -------------------------------------------------------------------------------- 1 | // function sayHelloTo(name) { 2 | // const message = 'Hello ' + name 3 | // 4 | // return function() { 5 | // console.log(message) 6 | // } 7 | // } 8 | // 9 | // const helloToElena = sayHelloTo('Elena') 10 | // const helloToIgor = sayHelloTo('Igor') 11 | // console.log(helloToElena) 12 | // helloToElena() 13 | // helloToIgor() 14 | 15 | function createFrameworkManager() { 16 | const fw = ['Angular', 'React'] 17 | 18 | return { 19 | print: function() { 20 | console.log(fw.join(' ')) 21 | }, 22 | add: function(framework) { 23 | fw.push(framework) 24 | } 25 | } 26 | } 27 | 28 | // const manager = createFrameworkManager() 29 | // // console.log(manager) 30 | // manager.print() 31 | // manager.add('VueJS') 32 | // 33 | // manager.print() 34 | 35 | // setTimeout 36 | 37 | const fib = [1, 2, 3, 5, 8, 13] 38 | 39 | for (var i = 0; i < fib.length; i++) { 40 | (function(j) { 41 | setTimeout(function () { 42 | console.log(`fib[${j}] = ${fib[j]}`) 43 | }, 1500) 44 | })(i) 45 | } 46 | -------------------------------------------------------------------------------- /07_iife.js: -------------------------------------------------------------------------------- 1 | // Immediate Invoked Function Expression 2 | let result = [] 3 | // for (var i = 0; i < 5; i++) { 4 | // result.push( function() { 5 | // console.log(i) 6 | // } ) 7 | // } 8 | // 9 | // result[2]() 10 | // result[4]() 11 | 12 | for (var i = 0; i < 5; i++) { 13 | (function() { 14 | var j = i 15 | result.push( function() { console.log(j) } ) 16 | })() 17 | } 18 | 19 | result[2]() 20 | result[4]() 21 | -------------------------------------------------------------------------------- /08_context.js: -------------------------------------------------------------------------------- 1 | const person = { 2 | surname: 'Старк', 3 | knows: function (what, name) { 4 | console.log(`Ты ${what} знаешь, ${name} ${this.surname}`) 5 | } 6 | } 7 | // 8 | // const john = { surname: 'Сноу' } 9 | // 10 | // person.knows('все', 'Бран') 11 | // person.knows.call(john, 'ничего не', 'Джон') 12 | // person.knows.apply(john, ['ничего не', 'Джон']) 13 | // person.knows.call(john, ...['ничего не', 'Джон']) 14 | // const bound = person.knows.bind(john, 'ничего не', 'Джон') 15 | // bound() 16 | 17 | // ======== 18 | 19 | // function Person(name, age) { 20 | // this.name = name 21 | // this.age = age 22 | // 23 | // console.log(this) 24 | // } 25 | // 26 | // const elena = new Person('Elena', 20) 27 | 28 | // ======== Явный 29 | // function logThis() { 30 | // console.log(this) 31 | // } 32 | // 33 | // const obj = {num: 42} 34 | // logThis.apply(obj) 35 | // logThis.call(obj) 36 | // logThis.bind(obj)() 37 | // 38 | // // ===== Неявный 39 | // const animal = { 40 | // legs: 4, 41 | // logThis: function() { 42 | // console.log(this) 43 | // } 44 | // } 45 | // 46 | // 47 | // animal.logThis() 48 | 49 | function Cat(color) { 50 | this.color = color 51 | console.log('This', this) 52 | ;( () => console.log('Arrow this', this) )() 53 | } 54 | 55 | new Cat('red') 56 | -------------------------------------------------------------------------------- /09_new.js: -------------------------------------------------------------------------------- 1 | function Cat(color, name) { 2 | this.color = color 3 | this.name = name 4 | } 5 | 6 | // const cat = new Cat('black', 'KOT') 7 | // console.log(cat) 8 | 9 | // function myNew(constructor, ...args) { 10 | // const obj = {} 11 | // Object.setPrototypeOf(obj, constructor.prototype) 12 | // return constructor.apply(obj, args) || obj 13 | // } 14 | // 15 | // const cat = myNew(Cat, 'black', 'KOT') 16 | // console.log(cat) 17 | 18 | const cat = new Cat() 19 | console.log(cat) 20 | 21 | -------------------------------------------------------------------------------- /10_prototypes.js: -------------------------------------------------------------------------------- 1 | // __proto__ 2 | // Object.getPrototypeOf() 3 | 4 | function Cat(name, color) { 5 | this.name = name 6 | this.color = color 7 | } 8 | 9 | Cat.prototype.voice = function() { 10 | console.log(`Cat ${this.name} says myay`) 11 | } 12 | 13 | const cat = new Cat('Kot', 'white') 14 | 15 | // console.log(Cat.prototype) 16 | // console.log(cat) 17 | // console.log(cat.__proto__ === Cat.prototype) 18 | // console.log(cat.constructor) 19 | // cat.voice() 20 | 21 | // ============ 22 | function Person() {} 23 | Person.prototype.legs = 2 24 | Person.prototype.skin = 'white' 25 | 26 | const person = new Person() 27 | person.name = 'Vladilen' 28 | 29 | // console.log('skin' in person) 30 | // console.log(person.legs) 31 | // console.log(person.name) 32 | 33 | // console.log(person.hasOwnProperty('name')) 34 | // console.log(person.hasOwnProperty('skin')) 35 | 36 | // Object.create() 37 | var proto = {year: 2019} 38 | const myYear = Object.create(proto) 39 | 40 | console.log(myYear.year) 41 | 42 | // proto.year = 2200 43 | // 44 | // console.log(myYear.year) 45 | 46 | proto = {year: 999} 47 | 48 | console.log(myYear.year) 49 | 50 | // console.log(myYear.hasOwnProperty('year')) 51 | // console.log(myYear.__proto__ === proto) 52 | 53 | -------------------------------------------------------------------------------- /11_async.js: -------------------------------------------------------------------------------- 1 | const first = () => console.log('First') 2 | const second = () => console.log('Second') 3 | const third = () => console.log('Third') 4 | 5 | first() 6 | 7 | setTimeout(second, 0) 8 | 9 | third() 10 | --------------------------------------------------------------------------------