SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Ähnlich wie Understanding JavaScript

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
 

Ähnlich wie Understanding JavaScript (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
 

Kürzlich hochgeladen

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 

Kürzlich hochgeladen (20)

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 

Understanding JavaScript

  • 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