SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

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
 

Mais procurados (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
 

Semelhante 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
 

Semelhante 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

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 

Último (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 

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