js l1 Posted on 2019-05-14 | Edited on 2019-05-15 ArraysArray literalsKnow several options how to create ArrayArray lengthKnow how Array length property worksClosures BasicsNested functionsAble to create nested functionsUnderstand variables visibility for nested scopesECMAScript Basicscost, let declarationsUnderstand differences between [var], [let] and [const]Know block scope and [let] visibilityAble to explain dead zone concept for [let]Arrow functionsKnow difference between arrow and usual functionsAble to discover cases for both arrow and usual functions usingExpressions, Operators, StatementsOperatorsKnow logic, mathematic operatorsKnow operators priorityBe able to use operatorsConditionsKnow and able to use conditional statementsLoopsKnow loop typesUnderstand loops differences and applicabilityBe able to skip loop iteration or break loopFunctionsFunction declaration/expressionKnow both Function expression and Function declarationBe able to explain declaration/expression differencesObjectsObject literalsKnow several ways how to create objectVariables, Values, Data TypesVariables - Know how to declare variablesValues - Know how to assign values to variablesLiterals - Know basic String, Number, Object, Array literalsPrimitive Data TypesDiscover primitive data typesAdvanced ExpressionsHoistingUnderstand hoisting conceptAble to use hoisting in developmentAuto data type conversionKnow rules of auto data types conversionBe able to discover cases of implicit data types conversion into boolean, string, numberStrict comparisonBe able to discover difference between strict and non-strict comparisonBe able to provide use cases of both types of comparisonAdvanced FunctionsargumentsUnderstand [arguments] and dynamic amount of parametersBe able to use [arguments], retrieve additional parameters[this] scopeUnderstand difference between function and methodUnderstand how [this] works, realize [this] possible issuesManage [this] scopeBe able to replace [this] scopeBe able to use [call] and [apply] Function build-in methodsArrays Built-in methodsKnow how to copy arrayKnow how to copy array partKnow how to modify arrayArrays Iterating, Sorting, FilteringKnow how to sort ArrayBe able to custom sorting for ArrayBe able to filter Array elementsKnow several method how to iterate Array elementsBe able to compare Hash and Array performanceClosures AdvancedContext (lexical environment)Understand function creation context (lexical environment)Be able to explain difference between scope and contextInner/outer lexical environmentUnderstand lexical environment traversing mechanismUnderstand connection between function and lexical environmentBe able to discover cases where lexical environment requiredBe able to create and use closuresECMAScript AdvancedPromisesKnow how [Promise] worksKnow promise chain patternBe able to compare promise and callback patternsBe able to handle errors in promisesBe able to use promisification patternIteratorsKnow [Iterator] interfaceBe able to create custom iteratorGeneratorsKnow generator syntaxBe able to compare generator and iteratorUnderstand how [yield] worksUnderstand plain async codeBe able to handle errors in generatorsECMAScript ClassesClass declarationKnow [class] declaration syntaxKnow how [class] declaration works under the hoodUnderstand difference between [class] and function constructorUnderstand difference between method and [class] methodBe able to develop in OOP style using [class] declaration[constructor] keywordInheritanceKnow [extends] syntax and how it worksGetter/setterBe able to create getter / setter [class] methodsECMAScript Data Types & ExpressionsObject [keys/values]Object calculated props[Symbol] data typeKnow [Symbol] data type specificBe able to explain difference between usual object key and symbol[Set/Map] data types[WeakSet/WeakMap] data typesECMAScript IntermediateFunction default parametersDiscover default parameters concept and limitationsSpread operator for FunctionKnow how to use spread operator for Function argumentsBe able to compare [arguments] and spread operatorSpread operator for ArrayUnderstand and able to use spread operator for Array concatenationDestructionBe able to discover destruction conceptUnderstand variables and Function arguments destructionString templatesKnow String template syntax and rules[for..of] loopKnow how [for..of] loop worksBe able to compare [for..of] loop with other types of loopsFunctional InheritanceRent a constructorKnow functional inheritance patternBe able to explain difference between functional and prototypal inheritanceBe able to discover benefits and drawback of both prototypal and functional inheritanceMix-insKnow mix-in patternKnow mix-in specific and limitationsAble to explain benefits and drawbacks comparing with inheritanceFunctional PatternsImmediate functionKnow immediate function patternBe able to explain the purposes of immediate function usageCallback (Function as argument)Know callback patternUnderstand callback limitations (callback hell)BindingKnow how to bind [this] scope to functionBe able to provide cases when it’s requiredFunctional ScopeKnow global scope and functional scopeKnow variables visibility areasUnderstand nested scopes and able work with themFunctions Parameters / ArgumentsKnow how to define Function parametersKnow difference between parameters passing by value and by referenceKnow how to handle dynamic amount of Function parametersJavaScript Errors[try..catch] statementKnow how to handle errorsBe able to explain [try..catch] performance issuesThrow errorsCustom errorsObject as HashBe able to use Object as a HashBe able to loop though Object keysObject Oriented Programming[new] keywordUnderstand how [new] keyword worksUnderstand the difference in calling function with / without [new] keywordFunction constructorKnow function constructor conceptKnow function constructor patternAble to create constructor functionsPublic, private, static membersKnow how to create public membersKnow how to create private membersKnow how to create static membersUnderstand OOP emulation patterns and conventionsObjects Built-in methodsKnow how to use built-in methodsKnow static Object methodsPrototypal Inheritance Basics[proto] propertyUnderstand [proto] object propertyUnderstand how interpreter traverses object propertiesAble to work with object [proto]Able to use [Object.create] and define [proto] explicitlyAble to set / get object prototype[prototype] propertyKnow function [prototype] propertyUnderstand dependency between function constructor [prototype] and instance [proto]Able to create ‘class’ methods using function [prototype] propertyRegular Expressions BasicsString methodsKnow String methods for regular expressionsUnderstand regular expressions performance issuesRegExp methods and flagsMetacharactersQuantifiersoptionalAdvanced Functional PatternsChainingKnow chaining pattern and cases where it will be usefulCurryingKnow how to bind arguments to functionMemorizationKnow memorization optimizationUnderstand problem with non-primitive arguments memorizationECMAScript Classes Advanced[super] keywordUnderstand [super] referenceAble to use [super] reference (in constructor, in class methods)[static] keywordKnow static members conceptBe able to create [class] static properties and methodsFunctions RecursionKnow recursion concept and able to use itAble to explain recursion risks, benefits and drawbacksObject Property DescriptorKnow how to use property descriptorsBe able to explain enumerable, configurable, writable property attributesBe able to create property getter/setterPrototypal Inheritance AdvancedTemporary constructorKnow prototypal inheritance mechanismKnow prototypal inheritance temporary constructor patternBe able to explain prototypal chain from instance to its ‘class’ and ‘class’ parentBe able to develop in OOP style using prototypal inheritance pattern[instanceof] operatorBe able to use [instanceof] operatorKnow how [instanceof] operator worksRegular Expressions AdvancedRangesGroupingGreedy and lazy searchReplacementsStrict modeStrict mode activationStrict mode limitations