SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
Understanding
                                JavaScript




Thursday, September 20, 12
Why JavaScript?

                     Simple
                     Multi paradigm
                     Works on the server and the browser
                     Lots of libraries
                     JSON


Thursday, September 20, 12
I heard it sucks, its broken

                     Implicit globals
                     Confusing this keyword
                     Confusing OO features, lack of class
                     syntax
                     Type coercion


Thursday, September 20, 12
The good parts




Thursday, September 20, 12
Type system

                     Weak typing means that a language
                     implicitly converts types when used.
                     A programming language is said to use
                     dynamic typing when type checking is
                     performed during run-time as opposed
                     to compile-time.


Thursday, September 20, 12
Type system
                     Constructors              Literals            typeof
                Object()                       {a: ‘b’}           ‘object’

                    Array()                [0, 1, ‘foo’, 3]       ‘object’

                    RegExp()                   /foo.*/            ‘object’

                    Date()                           -            ‘object’

                    -                            null             ‘object’

                Boolean()                    true        false    ‘boolean’

                String()                     “foo”       ‘bar’     string’

                Number()              30     0.5 Infinity NaN     ‘number’

                Function()             function foo() {}         ‘function’

                -                             undefined          ‘undefined’

Thursday, September 20, 12
Type system: Falsy values

                 0
                 null
                 undefined
                 false
                 ""
                 NaN
Thursday, September 20, 12
Type system: Coercion
                 undefined == undefined
                 ",,," == new Array(4)
                 NaN != NaN
                 "wat" - 1 == NaN
                 {} + {} == NaN
                 [] + [] == “”
                 [] + {} == “[object Object]”


Thursday, September 20, 12
Type system




Thursday, September 20, 12
Type system

                 Avoid coercion
                 Define API’s with clear types
                 Use the === operator
                 Read the spec or this article http://
                 webreflection.blogspot.com.es/2010/10/
                 javascript-coercion-demystified.html


Thursday, September 20, 12
Type system
           /**
             * Adds two numbers
             *
             * @param {Number} a
             * @param {Number} b
             * @return {Number}
             */
           function add(a, b) {
               return a + b;
           }

           /**
             * Returns the sumatory of a list of numbers
             *
             * @param {Array<Number>} list
             * @return {Number}
             */
           function sum(list) {
               return list.reduce(add, 0);
           }

Thursday, September 20, 12
Type system: Casting


                 Use the constructors       Number(‘3’) === 3


                 Use the prefix + operator   +‘3’ === 3


                 Use the infix + operator    3 + ‘0’ === ’30’


                 Use the prefix ! operator   !!1 === true




Thursday, September 20, 12
Variables

                 Variables are function scoped
                 The var operator is evaluated statically
                             It instantiates all the variables on the
                             current scope
                             It assigns them the undefined value
                 Assignment on variables that have not
                 been instantiated create a global
Thursday, September 20, 12
Variables
         // Hoisting: Cannot read property 'name' of undefined
         var name = user.name
           , user = {name: 'John'};

         // This creates a global!
         foo = ‘bar’;

         // Function scope
         var a = 10;

         if (true) {
           var a = 20;
         }

         (function () {
           var a = 30;
         }());

         a == 20;


Thursday, September 20, 12
Functions: Declaration vs Expression


         // Function declaration (static)
         function add(a, b) {
           return a + b;
         }

         // Function expression (runtime)
         var add = function (a, b) {
           return a + b;
         }

         // Function named expression (runtime)
         var recursiveAdd = function inc(a, b) {
           if (a > 100) return a;
           return inc(a + b, b);
         }




Thursday, September 20, 12
Functions: Higher order
                 Functions can accept functions as a
                 parameters and can return functions
                 Functions are objects after all, they can
                 even have attributes!
         // Returns a function that will have a delay
         function delayFunction(fn, delay) {
           fn.delayed = true;

           return function () {
              setTimeout(fn, delay);
           };
         });


Thursday, September 20, 12
Functions: Closures

                 Closures are function that “remember”
                 the variables on their scope
         // Gets a function to inspect the given object
         function getInspector(obj) {
            return function (attr) {
               return obj[attr];
            };
         };

         var inspect = getInspector({name: ‘john’, age: 21});
         [‘name’, ‘age’].map(inspect) == [‘john’, 21];




Thursday, September 20, 12
OOP: Prototypes

                 Each object can have a pointer to another
                 object called prototype
                 When we read an attribute from an
                 object but its not present, it will try to
                 find it through the prototype chain
                 Prototypes are powerful but can be
                 confusing. Delegation is easy.

Thursday, September 20, 12
OOP: Prototypes

         // Using non-standard __proto__
         var animal = {eat: true}
           , rabbit = {jump: true};

         rabbit.__proto__ = animal;
         rabbit.jump === true
         rabbit.eat === true

         // Using Object.create
         var animal = {eat: true}
           , rabbit;

         rabbit = Object.create(animal);
         rabbit.jump = true;

         rabbit.eat === true
         rabbit.jump === true


Thursday, September 20, 12
OOP: Constructors
                 Calling a function with the new operator
                 makes it behave like a constructor
                        The keyword this will point to the newl
                        object
                        The constructor will have an implicit
                        return of the new object
                        The pointer to the prototype is
                        assigned to the new object
Thursday, September 20, 12
OOP: Constructors

         var animal = {eats: true};

         function Rabbit(name) {
           this.name = name;
           this.jumps = true;
         }

         Rabbit.prototype = animal;

         var rabbit = new Rabbit('John')

         rabbit.eats === true
         rabbit.jumps === true
         rabbit.name === ‘John’




Thursday, September 20, 12
OOP: The `this` keyword

                 The global object if its on the main scope
                 The parent object of a method if the
                 function is called as a method
                 The newly created object from a
                 constructor called with the new operator
                 The first argument passed to call or
                 apply inside function code
Thursday, September 20, 12
OOP: Constructors

         // global
         this.Boolean = function () {return false;};
         Boolean(2) === false

         // method invocation
         var button = {
            toggle: function () {
              this.enabled = !!this.enabled;
            }
         };
         button.toggle();
         button.enabled === true;

         var toggle = button.toggle;
         toggle();
         button.enabled === true;




Thursday, September 20, 12
OOP: Constructors
         // Constructors
         function Rabbit(name) {
           this.name = name;
         }
         var rabbit = new Rabbit('John')
         rabbit.name === ‘John’;

         var rabbit = Rabbit(‘John’);
         rabbit.name === undefined;
         window.name === ‘John’;

         // call or apply
         [].reduce.call(
            "Javascript is cool!"
         , function (memo, a) {
              return a + memo;
            }
         );


Thursday, September 20, 12
Semicolons



                 Use them all the time
                 If a cool kid trolls you for using them,
                 send them this link http://asi.qfox.nl/



Thursday, September 20, 12

Más contenido relacionado

La actualidad más candente

Advanced javascript
Advanced javascriptAdvanced javascript
Advanced javascriptDoeun KOCH
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side JavascriptJulie Iskander
 
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기Wanbok Choi
 
Swift で JavaScript 始めませんか? #iOSDC
Swift で JavaScript 始めませんか? #iOSDCSwift で JavaScript 始めませんか? #iOSDC
Swift で JavaScript 始めませんか? #iOSDCTomohiro Kumagai
 
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...Sanjeev_Knoldus
 
Functions, Types, Programs and Effects
Functions, Types, Programs and EffectsFunctions, Types, Programs and Effects
Functions, Types, Programs and EffectsRaymond Roestenburg
 
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014hwilming
 
2 kotlin vs. java: what java has that kotlin does not
2  kotlin vs. java: what java has that kotlin does not2  kotlin vs. java: what java has that kotlin does not
2 kotlin vs. java: what java has that kotlin does notSergey Bandysik
 

La actualidad más candente (20)

Java Performance MythBusters
Java Performance MythBustersJava Performance MythBusters
Java Performance MythBusters
 
Advanced javascript
Advanced javascriptAdvanced javascript
Advanced javascript
 
Day 1
Day 1Day 1
Day 1
 
Scala - brief intro
Scala - brief introScala - brief intro
Scala - brief intro
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side Javascript
 
Java Script Best Practices
Java Script Best PracticesJava Script Best Practices
Java Script Best Practices
 
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기
 
Swift で JavaScript 始めませんか? #iOSDC
Swift で JavaScript 始めませんか? #iOSDCSwift で JavaScript 始めませんか? #iOSDC
Swift で JavaScript 始めませんか? #iOSDC
 
ECMA 入门
ECMA 入门ECMA 入门
ECMA 入门
 
Obvious Secrets of JavaScript
Obvious Secrets of JavaScriptObvious Secrets of JavaScript
Obvious Secrets of JavaScript
 
Grammarware Memes
Grammarware MemesGrammarware Memes
Grammarware Memes
 
JavaScript Primer
JavaScript PrimerJavaScript Primer
JavaScript Primer
 
Akka tips
Akka tipsAkka tips
Akka tips
 
Core concepts-javascript
Core concepts-javascriptCore concepts-javascript
Core concepts-javascript
 
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
 
Suit case class
Suit case classSuit case class
Suit case class
 
Functions, Types, Programs and Effects
Functions, Types, Programs and EffectsFunctions, Types, Programs and Effects
Functions, Types, Programs and Effects
 
Akka in-action
Akka in-actionAkka in-action
Akka in-action
 
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
 
2 kotlin vs. java: what java has that kotlin does not
2  kotlin vs. java: what java has that kotlin does not2  kotlin vs. java: what java has that kotlin does not
2 kotlin vs. java: what java has that kotlin does not
 

Similar a Understanding JavaScript fundamentals

Introduction To Javascript
Introduction To JavascriptIntroduction To Javascript
Introduction To JavascriptRajat Pandit
 
Proxies are Awesome!
Proxies are Awesome!Proxies are Awesome!
Proxies are Awesome!Brendan Eich
 
03 Advanced JavaScript
03 Advanced JavaScript03 Advanced JavaScript
03 Advanced JavaScriptYnon Perek
 
Ian 20150116 java script oop
Ian 20150116 java script oopIan 20150116 java script oop
Ian 20150116 java script oopLearningTech
 
Javascript And J Query
Javascript And J QueryJavascript And J Query
Javascript And J Queryitsarsalan
 
JavaScript (without DOM)
JavaScript (without DOM)JavaScript (without DOM)
JavaScript (without DOM)Piyush Katariya
 
The basics of Ember Objects
The basics of Ember ObjectsThe basics of Ember Objects
The basics of Ember ObjectsJason Schmidt
 
Testing javascriptwithjasmine sydjs
Testing javascriptwithjasmine sydjsTesting javascriptwithjasmine sydjs
Testing javascriptwithjasmine sydjsJo Cranford
 
data Structure Lecture 1
data Structure Lecture 1data Structure Lecture 1
data Structure Lecture 1Teksify
 
Stuff you didn't know about action script
Stuff you didn't know about action scriptStuff you didn't know about action script
Stuff you didn't know about action scriptChristophe Herreman
 
Functional Core, Reactive Shell
Functional Core, Reactive ShellFunctional Core, Reactive Shell
Functional Core, Reactive ShellGiovanni Lodi
 
Get started with YUI
Get started with YUIGet started with YUI
Get started with YUIAdam Lu
 
Jsphp 110312161301-phpapp02
Jsphp 110312161301-phpapp02Jsphp 110312161301-phpapp02
Jsphp 110312161301-phpapp02Seri Moth
 
JavaScript for PHP developers
JavaScript for PHP developersJavaScript for PHP developers
JavaScript for PHP developersStoyan Stefanov
 

Similar a Understanding JavaScript fundamentals (20)

Introduction To Javascript
Introduction To JavascriptIntroduction To Javascript
Introduction To Javascript
 
Js in the open
Js in the openJs in the open
Js in the open
 
Proxies are Awesome!
Proxies are Awesome!Proxies are Awesome!
Proxies are Awesome!
 
03 Advanced JavaScript
03 Advanced JavaScript03 Advanced JavaScript
03 Advanced JavaScript
 
Ian 20150116 java script oop
Ian 20150116 java script oopIan 20150116 java script oop
Ian 20150116 java script oop
 
Oojs 1.1
Oojs 1.1Oojs 1.1
Oojs 1.1
 
25-functions.ppt
25-functions.ppt25-functions.ppt
25-functions.ppt
 
Javascript
JavascriptJavascript
Javascript
 
Javascript And J Query
Javascript And J QueryJavascript And J Query
Javascript And J Query
 
JavaScript (without DOM)
JavaScript (without DOM)JavaScript (without DOM)
JavaScript (without DOM)
 
The basics of Ember Objects
The basics of Ember ObjectsThe basics of Ember Objects
The basics of Ember Objects
 
JavaScript Neednt Hurt - JavaBin talk
JavaScript Neednt Hurt - JavaBin talkJavaScript Neednt Hurt - JavaBin talk
JavaScript Neednt Hurt - JavaBin talk
 
Testing javascriptwithjasmine sydjs
Testing javascriptwithjasmine sydjsTesting javascriptwithjasmine sydjs
Testing javascriptwithjasmine sydjs
 
data Structure Lecture 1
data Structure Lecture 1data Structure Lecture 1
data Structure Lecture 1
 
Stuff you didn't know about action script
Stuff you didn't know about action scriptStuff you didn't know about action script
Stuff you didn't know about action script
 
Functional Core, Reactive Shell
Functional Core, Reactive ShellFunctional Core, Reactive Shell
Functional Core, Reactive Shell
 
Get started with YUI
Get started with YUIGet started with YUI
Get started with YUI
 
Jsphp 110312161301-phpapp02
Jsphp 110312161301-phpapp02Jsphp 110312161301-phpapp02
Jsphp 110312161301-phpapp02
 
JavaScript Object API
JavaScript Object APIJavaScript Object API
JavaScript Object API
 
JavaScript for PHP developers
JavaScript for PHP developersJavaScript for PHP developers
JavaScript for PHP developers
 

Último

My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 

Último (20)

My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 

Understanding JavaScript fundamentals

  • 1. Understanding JavaScript Thursday, September 20, 12
  • 2. Why JavaScript? Simple Multi paradigm Works on the server and the browser Lots of libraries JSON Thursday, September 20, 12
  • 3. I heard it sucks, its broken Implicit globals Confusing this keyword Confusing OO features, lack of class syntax Type coercion Thursday, September 20, 12
  • 4. The good parts Thursday, September 20, 12
  • 5. Type system Weak typing means that a language implicitly converts types when used. A programming language is said to use dynamic typing when type checking is performed during run-time as opposed to compile-time. Thursday, September 20, 12
  • 6. Type system Constructors Literals typeof Object() {a: ‘b’} ‘object’ Array() [0, 1, ‘foo’, 3] ‘object’ RegExp() /foo.*/ ‘object’ Date() - ‘object’ - null ‘object’ Boolean() true false ‘boolean’ String() “foo” ‘bar’ string’ Number() 30 0.5 Infinity NaN ‘number’ Function() function foo() {} ‘function’ - undefined ‘undefined’ Thursday, September 20, 12
  • 7. Type system: Falsy values 0 null undefined false "" NaN Thursday, September 20, 12
  • 8. Type system: Coercion undefined == undefined ",,," == new Array(4) NaN != NaN "wat" - 1 == NaN {} + {} == NaN [] + [] == “” [] + {} == “[object Object]” Thursday, September 20, 12
  • 10. Type system Avoid coercion Define API’s with clear types Use the === operator Read the spec or this article http:// webreflection.blogspot.com.es/2010/10/ javascript-coercion-demystified.html Thursday, September 20, 12
  • 11. Type system /** * Adds two numbers * * @param {Number} a * @param {Number} b * @return {Number} */ function add(a, b) { return a + b; } /** * Returns the sumatory of a list of numbers * * @param {Array<Number>} list * @return {Number} */ function sum(list) { return list.reduce(add, 0); } Thursday, September 20, 12
  • 12. Type system: Casting Use the constructors Number(‘3’) === 3 Use the prefix + operator +‘3’ === 3 Use the infix + operator 3 + ‘0’ === ’30’ Use the prefix ! operator !!1 === true Thursday, September 20, 12
  • 13. Variables Variables are function scoped The var operator is evaluated statically It instantiates all the variables on the current scope It assigns them the undefined value Assignment on variables that have not been instantiated create a global Thursday, September 20, 12
  • 14. Variables // Hoisting: Cannot read property 'name' of undefined var name = user.name , user = {name: 'John'}; // This creates a global! foo = ‘bar’; // Function scope var a = 10; if (true) { var a = 20; } (function () { var a = 30; }()); a == 20; Thursday, September 20, 12
  • 15. Functions: Declaration vs Expression // Function declaration (static) function add(a, b) { return a + b; } // Function expression (runtime) var add = function (a, b) { return a + b; } // Function named expression (runtime) var recursiveAdd = function inc(a, b) { if (a > 100) return a; return inc(a + b, b); } Thursday, September 20, 12
  • 16. Functions: Higher order Functions can accept functions as a parameters and can return functions Functions are objects after all, they can even have attributes! // Returns a function that will have a delay function delayFunction(fn, delay) { fn.delayed = true; return function () { setTimeout(fn, delay); }; }); Thursday, September 20, 12
  • 17. Functions: Closures Closures are function that “remember” the variables on their scope // Gets a function to inspect the given object function getInspector(obj) { return function (attr) { return obj[attr]; }; }; var inspect = getInspector({name: ‘john’, age: 21}); [‘name’, ‘age’].map(inspect) == [‘john’, 21]; Thursday, September 20, 12
  • 18. OOP: Prototypes Each object can have a pointer to another object called prototype When we read an attribute from an object but its not present, it will try to find it through the prototype chain Prototypes are powerful but can be confusing. Delegation is easy. Thursday, September 20, 12
  • 19. OOP: Prototypes // Using non-standard __proto__ var animal = {eat: true} , rabbit = {jump: true}; rabbit.__proto__ = animal; rabbit.jump === true rabbit.eat === true // Using Object.create var animal = {eat: true} , rabbit; rabbit = Object.create(animal); rabbit.jump = true; rabbit.eat === true rabbit.jump === true Thursday, September 20, 12
  • 20. OOP: Constructors Calling a function with the new operator makes it behave like a constructor The keyword this will point to the newl object The constructor will have an implicit return of the new object The pointer to the prototype is assigned to the new object Thursday, September 20, 12
  • 21. OOP: Constructors var animal = {eats: true}; function Rabbit(name) { this.name = name; this.jumps = true; } Rabbit.prototype = animal; var rabbit = new Rabbit('John') rabbit.eats === true rabbit.jumps === true rabbit.name === ‘John’ Thursday, September 20, 12
  • 22. OOP: The `this` keyword The global object if its on the main scope The parent object of a method if the function is called as a method The newly created object from a constructor called with the new operator The first argument passed to call or apply inside function code Thursday, September 20, 12
  • 23. OOP: Constructors // global this.Boolean = function () {return false;}; Boolean(2) === false // method invocation var button = { toggle: function () { this.enabled = !!this.enabled; } }; button.toggle(); button.enabled === true; var toggle = button.toggle; toggle(); button.enabled === true; Thursday, September 20, 12
  • 24. OOP: Constructors // Constructors function Rabbit(name) { this.name = name; } var rabbit = new Rabbit('John') rabbit.name === ‘John’; var rabbit = Rabbit(‘John’); rabbit.name === undefined; window.name === ‘John’; // call or apply [].reduce.call( "Javascript is cool!" , function (memo, a) { return a + memo; } ); Thursday, September 20, 12
  • 25. Semicolons Use them all the time If a cool kid trolls you for using them, send them this link http://asi.qfox.nl/ Thursday, September 20, 12