SlideShare a Scribd company logo
The JavaScript Programming Language Douglas Crockford
Overview History Language Advanced Features Platforms Standards Style
The World's Most Misunderstood Programming Language
Sources of Misunderstanding The Name Mispositioning Design Errors Bad Implementations The Browser Bad Books Substandard Standard JavaScript is a Functional Language
History 1992 Oak, Gosling at Sun & FirstPerson 1995 HotJava LiveScript, Eich at Netscape 1996 JScript at Microsoft 1998 ECMAScript
Not a Web Toy It is a real language Small, but sophisticated It is not a subset of Java
Key Ideas Load and go delivery Loose typing Objects as general containers Prototypal inheritance Lambda Linkage though global variables
Values Numbers Strings Booleans Objects null undefined
Numbers Only one number type No integers 64-bit floating point IEEE-754 (aka “ Double ”) Does not map well to common understanding of arithmetic:  0.1 + 0.2 = 0.30000000000000004
NaN Special number: Not a Number Result of undefined or erroneous operations Toxic: any arithmetic operation with  NaN  as an input will have  NaN  as a result NaN  is not equal to anything, including  NaN
Number function Number( value ) Converts the value into a number. It produces  NaN  if it has a problem. Similar to  +  prefix operator.
parseInt function parseInt( value , 10) Converts the value into a number. It stops at the first non-digit character. The radix ( 10 ) should be required. parseInt("08") === 0 parseInt("08", 10) === 8
Math Math object is modeled on Java's Math class. It contains   abs absolute value floor integer log logarithm max maximum pow raise to a power random random number round nearest integer sin sine sqrt square root
Strings Sequence of 0 or more 16-bit characters UCS-2, not quite UTF-16 No awareness of surrogate pairs No separate character type Characters are represented as strings with a length of 1 Strings are immutable Similar strings are equal (  ==  ) String literals can use single or double quotes
String  length string .length The  length  property determines the number of 16-bit characters in a string.
String function String( value ) Converts value to a string
String Methods charAt concat indexOf lastIndexOf match replace search slice split substring toLowerCase toUpperCase
Booleans true false
Boolean function Boolean( value ) returns  true  if value is truthy returns  false  if value is falsy Similar to  !!  prefix operator
null A value that isn't anything
undefined A value that isn't even that The default value for variables and parameters The value of missing members in objects
Falsy values false null undefined ""  ( empty string) 0 NaN All other values (including all objects) are truthy. "0"  "false"
Everything Else Is Objects
Dynamic Objects Unification of Object and Hashtable new Object()  produces an empty container of name/value pairs A name can be any string, a value can be any value except  undefined members can be accessed with dot notation or subscript notation No hash nature is visible (no hash codes or rehash methods)
Loosely Typed Any of these types can be stored in an variable, or passed as a parameter to any function The language is not "untyped"
C JavaScript is syntactically a C family language It differs from C mainly in its type system, which allows functions to be values
Identifiers Starts with a letter or _ or  $ Followed by zero or more letters, digits, _ or  $ By convention, all variables, parameters, members, and function names start with lower case Except for constructors which start with upper case Initial _ should be reserved for implementations $  should be reserved for machines.
Reserved Words abstract boolean  break  byte case   catch  char class const  continue debugger  default   delete   do  double else  enum export extends false  final  finally  float  for   function goto if  implements import  in   instanceof  int interface long native  new null package private protected public return short static super  switch  synchronized this   throw  throws transient  true try   typeof var  volatile  void while   with
Comments // slashslash line comment /*  slashstar  block  comment  */
Operators Arithmetic +  -  *  /  % Comparison ==  !=  <  >  <=  >= Logical &&  ||  ! Bitwise &  |  ^  >>  >>>  << Ternary ?:
+ Addition and concatenation If both operands are numbers,  then  add them else  convert them both to strings concatenate them '$' + 3 + 4 = '$34'
+ Unary operator can convert strings to numbers +&quot;42&quot; = 42 Also Number(&quot;42&quot;) = 42 Also parseInt(&quot;42&quot;, 10) = 42 +&quot;3&quot; + (+&quot;4&quot;) = 7
/ Division of two integers can produce a non-integer result 10 / 3 = 3.3333333333333335
==  != Equal and not equal These operators can do type coercion It is better to use  ===  and  !== , which do not do type coercion.
&& The guard operator, aka  logical and If first operand is truthy then result is second operand else result is first operand It can be used to avoid null references if (a) { return a.member; } else { return a; } can be written as return a && a.member;
|| The default operator, aka  logical or If first operand is truthy then result is first operand else result is second operand It can be used to fill in default values. var last = input || nr_items; (If  input  is truthy, then  last  is input, otherwise set  last  to  nr_items .)
! Prefix  logical not  operator. If the operand is truthy, the result is  false . Otherwise, the result is  true . !!  produces booleans.
Bitwise &  |  ^  >>  >>>  << The bitwise operators convert the operand to a 32-bit signed integer, and turn the result back into 64-bit floating point.
Statements expression if switch while do for break continue return try/throw
Break statement Statements can have labels.  Break statements can refer to those labels. loop:  for (;;) { ... if (...) { break  loop ; } ... }
For statement Iterate through all of the elements of an array: for (var  i  = 0;  i  <  array .length;  i  += 1) { //  within the loop,  //   i  is the index of the current member //   array [ i ]  is the current element }
For statement Iterate through all of the members of an object: for (var  name   in   object ) { if ( object .hasOwnProperty( name )) { //  within the loop,  //   name  is the key of current member //   object [ name ]  is the current value } }
Switch statement Multiway branch The switch value does not need to a number. It can be a string. The case values can be expressions.
Switch statement switch ( expression ) { case ';': case ',': case '.': punctuation(); break; default: noneOfTheAbove(); }
Throw statement throw new Error( reason ); throw { name :  exceptionName , message :  reason };
Try statement try { ... } catch ( e ) { switch ( e .name) { case 'Error': ... break; default: throw  e ; } }
Try Statement The JavaScript implementation can produce these exception  names: 'Error' 'EvalError' 'RangeError' 'SyntaxError' 'TypeError' 'URIError'
With statement Intended as a short-hand Ambiguous Error-prone Don't use it with (o) { foo = null; } o.foo = null; foo = null;
Function statement function   name ( parameters ) { statements ; }
Var statement Defines variables within a function. Types are not specified. Initial values are optional. var name; var nrErrors = 0; var a, b, c;
Scope In JavaScript,  { blocks }  do not have scope. Only functions have scope. Vars defined in a function are not visible outside of the function.
Return statement return   expression ; or return; If there is no  expression , then the return value is  undefined .  Except for constructors, whose default return value is  this .
Objects Everything else is objects Objects can contain data and methods Objects can inherit from other objects.
Collections An object is an unordered collection of name/value pairs Names are strings Values are any type, including other objects Good for representing records and trees Every object is a little database
Object Literals Object literals are wrapped in  { } Names can be names or strings  Values can be expressions :  separates names and values ,  separates pairs Object literals can be used anywhere a value can appear
Object Literals var myObject = {name: &quot;Jack B. Nimble&quot;, 'goto': 'Jail', grade: 'A', level: 3};  var theName = myObject.name; var destination = myObject['goto']; 3 &quot;level&quot; &quot;A&quot; &quot;grade&quot; &quot;Jail&quot; &quot;goto&quot; &quot;Jack B. Nimble&quot; &quot;name&quot;
Maker Function function maker(name, where, grade, level) { var it = {}; it.name = name; it['goto'] = where; it.grade = grade; it.level = level; return it; } myObject = maker(&quot;Jack B. Nimble&quot;,  'Jail', 'A', 3);
Object Literals var myObject = {name: &quot;Jack B. Nimble&quot;, 'goto': 'Jail', grade: 'A',  format: {type: 'rect', width: 1920, height: 1080, interlace: false, framerate: 24} };
Object Literals var myObject = { name: &quot;Jack B. Nimble&quot;,  'goto': 'Jail',  grade: 'A',  format: { type: 'rect',  width: 1920,  height: 1080,  interlace: false,  framerate: 24 } };
Object Literals myFunction({ type: 'rect',  width: 1920,  height: 1080 }); throw { name: 'error',  message: 'out of bounds' };
Object Literals function SuperDiv(width, height, left, top, zIndex, position, color, visibility, html, cssClass) function SuperDiv(spec)
Object Augmentation New members can be added to any object by simple assignment There is no need to define a new class myObject.format.colorModel =  'YCgCb'; myObject[name] = value;
Linkage Objects can be created with a secret link to another object. If an attempt to access a name fails, the secret linked object will be used. The secret link is not used when storing. New members are only added to the primary object. The  object( o )  function makes a new empty object with a link to object o.
Linkage var myNewObject = object(myOldObject); myNewObject myOldObject 3 &quot;level&quot; &quot;A&quot; &quot;grade&quot; &quot;Jail&quot; &quot;goto&quot; &quot;Jack B. Nimble&quot; &quot;name&quot;
Linkage myNewObject.name = &quot;Tom Piperson&quot;; myNewObject.level += 1; myNewObject.crime = 'pignapping'; &quot;pignapping&quot; &quot;crime&quot; 4 &quot;level&quot; &quot;Tom Piperson&quot; &quot;name&quot; 3 &quot;level&quot; &quot;A&quot; &quot;grade&quot; &quot;Jail&quot; &quot;goto&quot; &quot;Jack B. Nimble&quot; &quot;name&quot;
Inheritance Linkage provides simple inheritance. An object can inherit from an older object.
Prototypal Inheritance Some languages have classes, methods,  constructors, and modules. JavaScript's functions do the work of all of those. Instead of Classical Inheritance, JavaScript has Prototypal Inheritance. It accomplishes the same things, but differently. It offers greater expressive power. But it's different.
Prototypal Inheritance Instead of organizing objects into rigid classes, new objects can be made that are similar to existing objects, and then customized. Object customization is a lot less work than making a class, and less overhead, too. One of the keys is the  object(o)  function. The other key is functions.
Object Methods All objects are linked directly or indirectly to  Object.prototype All objects inherit some basic methods.  None of them are very useful. hasOwnProperty( name ) Is the name a true member of this object? No  copy  method. No  equals  method.
Object Construction Make a new empty object All three of these expressions have exactly the same result:  new Object() {} object(Object.prototype) {}  is the preferred form.
Reference Objects can be passed as arguments to functions, and can be returned by functions Objects are passed by reference. Objects are not passed by value. The  ===  operator compares object references, not values true  only if both operands are the same object
Delete Members can be removed from an object with the  delete  operator delete   myObject [ name ];
Arrays Array  inherits from  Object . Indexes are converted to strings and used as names for retrieving values. Very efficient for sparse arrays. Not very efficient in most other cases. One advantage: No need to provide a length or type when creating an array.
length Arrays, unlike objects, have a special  length  member. It is always 1 larger than the highest integer subscript. It allows use of the traditional  for  statement. for (i = 0; i < a.length; i += 1) { ... } Do not use  for .. in  with arrays
Array Literals An array literal uses  [] It can contain any number of expressions, separated by commas myList = ['oats', 'peas', 'beans'];   New items can be appended myList[myList.length] = 'barley'; The dot notation  should not be used with arrays. []  is preferred to  new Array() .
Array Methods concat join pop push slice sort splice
Deleting Elements delete array[number] Removes the element, but leaves a hole in the numbering. array.splice(number, 1) Removes the element and renumbers all the following elements.
Deleting Elements myArray = ['a',  'b' , 'c', 'd']; delete myArray[1]; // ['a',  undefined , 'c', 'd'] myArray.splice(1, 1); // ['a', 'c', 'd']
Arrays v Objects Use objects when the names are arbitrary strings. Use arrays when the names are sequential integers. Don't get confused by the term Associative Array.
Distinguishing Arrays value.constructor === Array value instanceof Array Neither of these work when the value comes from a different frame.
Arrays and Inheritance Don’t use arrays as prototypes.  The object produced this way does not have array nature. It will inherit the array's values and methods, but not its  length . You can augment an individual array. Assign a method to it. This works because arrays are objects. You can augment all arrays. Assign methods to  Array.prototype
Functions Functions are first-class objects Functions can be passed, returned, and stored just like any other value Functions inherit from  Object  and can store name/value pairs.
Function operator The function operator takes an optional name, a parameter list, and a block of statements, and returns a function object. function   name ( parameters ) { statements } A function can appear anywhere that an expression can appear.
lambda What JavaScript calls  function , other languages call  lambda . It is a source of enormous expressive power. Unlike most power-constructs, it is secure.
Function statement The function statement is just a short-hand for a  var  statement with a function value. function foo() {} expands to var foo = function foo() {};
Inner functions Functions do not all have to be defined at the top level (or left edge). Functions can be defined inside of other functions.
Scope An inner function has access to the variables and parameters of functions that it is contained within. This is known as Static Scoping or Lexical Scoping.
Closure The scope that an inner function enjoys continues even after the parent functions have returned. This is called  closure .
Example function fade(id) { var dom = document.getElementById(id), level = 1; function step () { var h = level.toString(16); dom.style.backgroundColor =  '#FFFF' + h + h; if (level < 15) { level += 1; setTimeout(step, 100); } } setTimeout(step, 100); }
Function Objects Functions are objects, so they can contain name/value pairs. This can serve the same purpose as  static  members in other languages.
Method Since functions are values, functions can be stored in objects. A function in an object is called a  method .
Invocation If a function is called with too many arguments, the extra arguments are ignored. If a function is called with too few arguments, the missing values will be  undefined . There is no implicit type checking on the arguments.
Invocation There are four ways to call a function: Function form functionObject ( arguments ) Method form thisObject . methodName ( arguments ) thisObject [&quot; methodName &quot;]( arguments ) Constructor form new   functionObject ( arguments ) Apply form functionObject .apply( thisObject ,  [ arguments ])
Method form thisObject . methodName ( arguments ) When a function is called in the method form,  this  is set to  thisObject , the object containing the function. This allows methods to have a reference to the object of interest.
Function form functionObject ( arguments ) When a function is called in the function form,  this  is set to the global object. That is not very useful. It makes it harder to write helper functions within a method because the helper function does not get access to the outer  this . var  that  = this;
Constructor form new   functionObject ( arguments ) When a function is called with the  new  operator, a new object is created and assigned to  this . If there is not an explicit return value, then  this  will be returned.
this this  is an extra parameter. Its value depends on the calling form. this  gives methods access to their objects. this  is bound at invocation time. the new object constructor the object method the global object function this Invocation form
arguments When a function is invoked, in addition to its parameters, it also gets a special parameter called  arguments . It contains all of the arguments from the invocation. It is an array-like object. arguments.length  is the number of arguments passed.
Example function sum() { var i,  n =  arguments .length, total = 0; for (i = 0; i < n; i += 1) { total +=  arguments [i]; } return total; }
Augmenting Built-in Types Object.prototype Array.prototype Function.prototype Number.prototype String.prototype Boolean.prototype
trim String.prototype.trim = function () { return this.replace( /^\s*(\S*(\s+\S+)*)\s*$/, &quot;$1&quot;);  };
supplant var template = '<table border=&quot; {border} &quot;>' + '<tr><th>Last</th><td> {last} </td></tr>' + '<tr><th>First</th><td> {first} </td></tr>' + '</table>'; var data = { first: &quot;Carl&quot;,  last: &quot;Hollywood&quot;,  border: 2 }; mydiv.innerHTML = template.supplant(data);
supplant String.prototype.supplant = function (o) {  return this.replace(/{([^{}]*)}/g,  function (a, b) {  var r = o[b]; return typeof r === 'string' ?  r : a;  } );  };
typeof The  typeof  prefix operator returns a string identifying the type of a value. 'undefined' undefined 'object' null 'boolean' boolean 'string' string 'number' number 'object' array 'function' function 'object' object typeof type
eval eval( string ) The  eval  function compiles and executes a string and returns the result. It is what the browser uses to convert strings into actions. It is the most misused feature of the language.
Function function new Function( parameters ,   body ) The  Function  constructor takes zero or more parameter name strings, and a body string, and uses the JavaScript compiler to produce a function object. It should only be used to compile fresh source from a server.  It is closely related to  eval .
Built-in Type Wrappers Java has  int  and  Integer , two incompatible types which can both carry the same value with differing levels of efficiency and convenience. JavaScript copied this pattern to no advantage. Avoid it. Avoid  new Boolean() Avoid  new String() Avoid  new Number()
Confession function object(o) { function F() {} F.prototype = o; return new F(); }
Augmentation We can directly modify individual objects to give them just the characteristics we want. We can do this without having to create classes. We can then use our new object as the prototype for lots of new objects, each of which can also be augmented.
Working with the Grain Classical patterns are less effective than prototypal patterns or parasitic patterns. Formal classes are not needed for reuse or extension.
(global) Object The object that dares not speak its name. It is the container for all global variables and all built-in objects.  Sometimes  this  points to it.   var global = this; On browsers,  window  is the global object.
Global variables are evil Functions within an application can clobber each other. Cooperating applications can clobber each other. Use of the global namespace must be minimized.
Implied Global Any var which is not properly declared is assumed to be global by default. This makes it easy for people who do not know or care about encapsulation to be productive, but it makes applications less reliable. JSLint is a tool which helps identify implied globals and other weaknesses. http://www.JSLint.com
Namespace Every object is a separate namespace.  Use an object to organize your variables and functions. The  YAHOO  Object. <head> <script> YAHOO={}; </script> http://twiki.corp.yahoo.com/view/Devel/TheYAHOOObject
Encapsulate Function scope can create an encapsulation. Use an anonymous function to wrap your application.
Example YAHOO.Trivia = function () { // define your common vars here // define your common functions here return { getNextPoser: function (cat, diff) { ... }, showPoser: function () { ... } }; } ();
Thinking about type Trading type-safety for dynamism. JavaScript has no cast operator.  Reflection is really easy, and usually unnecessary. Why inheritance? Automatic casting Code reuse Trading brittleness for flexibility.
Date The  Date  function is based on Java's Date class. It was not Y2K ready.
RegExp Regular expression pattern matcher Patterns are enclosed in slashes Example: a pattern that matches regular expressions /\/(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\\/])*\]|[^\x00-\x1f\\\/\[])+\/[gim]*/ Bizarre notation, difficult to read.
Threads The language definition is neutral on threads Some language processors (like SpiderMonkey) provide thread support Most application environments (like browsers) do not provide it Threads are evil
Platforms Browsers WSH and Dashboard Yahoo!Widgets DreamWeaver and Photoshop Embedded
ActionScript Empty strings are truthy keywords are case insensitive No Unicode support No  RegExp No  try No statement labels ||  and  &&  return booleans separate operators for strings and numbers
E4X Extensions to ECMAScript for XML Proposed by BEA Allows  <XML>  literals Not compatible with ECMAScript Third Edition Not widely accepted yet Not in IE7
ECMAScript Fourth Edition A very large set of new features are being considered. Mozilla and Opera are committed. It is not clear that Microsoft will adopt it. No word from Safari yet.
Style Programming style isn't about personal taste. It is about rigor in expression. It is about clearness in presentation. It is about product adaptability and longevity. Good rules help us to keep the quality of our programs high.
Style and JavaScript Style is critically important for JavaScript. The dynamic nature of the language is considered by some to be &quot;too soft&quot;. Discipline is necessary for balance. Most of the world's body of JavaScript programs is crap.
Code Conventions for the JavaScript Programming Language http://javascript.crockford.com/code.html
Semicolon insertion When the compiler sees an error, it attempts to replace a nearby linefeed with a semicolon and try again. This should alarm you. It can mask errors. Always use the full, correct forms, including semicolons.
Line Ending Break a line after  a punctuator:  , . ; : { } ( [ = < > ? ! + - * / % ~ ^ | & == != <= >= += -= *= /= %= ^= |= &= << >> || && === !== <<= >>= >>> >>>=   Do not break after a name, string, number, or  ) ] ++ --   Defense against copy/paste errors.
Comma Avoid tricky expressions using the comma operators. Do not use extra commas in array literals. Good:  [1, 2, 3] Bad:  [1, 2, 3,]
Required Blocks Good: if (a) { b(); }  Bad: if (a) b();
Forbidden Blocks Blocks do not have scope in JavaScript. Blocks should only be used with structured statements  function if switch while for do try
Variables Define all variables at the beginning of the function. JavaScript does not have block scope, so their is no advantage in declaring variables at the place of their first use.
Expression Statements Any expression can be used as a statement. That can mask errors. Only assignment expressions and invocation expressions should be used as statements. Good: foo(); Bad: foo && foo();
switch  Statement Avoid using fallthrough.  Each clause should explicitly  break  or  return  or  throw .
Assignment Expressions Do not use assignment expressions in the condition parts of  if ,  while , or  for . It is more likely that if (a = b) { ... }   was intended to be  if (a == b) { ... }   Avoid tricky expressions.
== and != Be aware that  ==  and  !=  do type coercion. Bad if (a == null) { ... } Good: if (a === null) { ... } if (!a) { ... }
Labels Use labels only on these statements: do  for  switch while Never use  javascript:  as a label.
JSLint JSLint can help improve the robustness and portability of your programs. It enforces style rules. It can spot some errors that are very difficult to find in debugging. It can help eliminate implied globals. Currently available on the web and as a Konfabulator widget. Soon, in text editors and Eclipse. http://www.JSLint.com/
UHOH! Universal Header Onerror Handler Inserted into 0.1% of pages Reports on JavaScript errors http://uhoh.corp.yahoo.com/
Key Ideas Load and go delivery Loose typing Objects as general containers Prototypal inheritance Lambda Linkage though global variables
The JavaScript Programming Language Douglas Crockford [email_address] produce.yahoo.com/crock/javascript.ppt

More Related Content

What's hot (20)

Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]
Aaron Gustafson
 
Lab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptLab #2: Introduction to Javascript
Lab #2: Introduction to Javascript
Walid Ashraf
 
DIWE - Programming with JavaScript
DIWE - Programming with JavaScriptDIWE - Programming with JavaScript
DIWE - Programming with JavaScript
Rasan Samarasinghe
 
Javascript Basics
Javascript BasicsJavascript Basics
Javascript Basics
msemenistyi
 
Javascript
JavascriptJavascript
Javascript
Aditya Gaur
 
Introduction to JavaScript Basics.
Introduction to JavaScript Basics.Introduction to JavaScript Basics.
Introduction to JavaScript Basics.
Hassan Ahmed Baig - Web Developer
 
Javascript - Tutorial
Javascript - TutorialJavascript - Tutorial
Javascript - Tutorial
adelaticleanu
 
Introduction to web programming with JavaScript
Introduction to web programming with JavaScriptIntroduction to web programming with JavaScript
Introduction to web programming with JavaScript
T11 Sessions
 
8 introduction to_java_script
8 introduction to_java_script8 introduction to_java_script
8 introduction to_java_script
Vijay Kalyan
 
JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...
JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...
JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...
Edureka!
 
Intro to Javascript
Intro to JavascriptIntro to Javascript
Intro to Javascript
Anjan Banda
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
Andres Baravalle
 
JavaScript - An Introduction
JavaScript - An IntroductionJavaScript - An Introduction
JavaScript - An Introduction
Manvendra Singh
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
Fu Cheng
 
Introduction to JavaScript Programming
Introduction to JavaScript ProgrammingIntroduction to JavaScript Programming
Introduction to JavaScript Programming
Collaboration Technologies
 
Javascript
JavascriptJavascript
Javascript
mussawir20
 
Java script
Java scriptJava script
Java script
Prarthan P
 
Javascript basics
Javascript basicsJavascript basics
Javascript basics
shreesenthil
 
Java Intro
Java IntroJava Intro
Java Intro
backdoor
 
Java tutorial for Beginners and Entry Level
Java tutorial for Beginners and Entry LevelJava tutorial for Beginners and Entry Level
Java tutorial for Beginners and Entry Level
Ramrao Desai
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]
Aaron Gustafson
 
Lab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptLab #2: Introduction to Javascript
Lab #2: Introduction to Javascript
Walid Ashraf
 
DIWE - Programming with JavaScript
DIWE - Programming with JavaScriptDIWE - Programming with JavaScript
DIWE - Programming with JavaScript
Rasan Samarasinghe
 
Javascript Basics
Javascript BasicsJavascript Basics
Javascript Basics
msemenistyi
 
Javascript - Tutorial
Javascript - TutorialJavascript - Tutorial
Javascript - Tutorial
adelaticleanu
 
Introduction to web programming with JavaScript
Introduction to web programming with JavaScriptIntroduction to web programming with JavaScript
Introduction to web programming with JavaScript
T11 Sessions
 
8 introduction to_java_script
8 introduction to_java_script8 introduction to_java_script
8 introduction to_java_script
Vijay Kalyan
 
JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...
JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...
JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...
Edureka!
 
Intro to Javascript
Intro to JavascriptIntro to Javascript
Intro to Javascript
Anjan Banda
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
Andres Baravalle
 
JavaScript - An Introduction
JavaScript - An IntroductionJavaScript - An Introduction
JavaScript - An Introduction
Manvendra Singh
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
Fu Cheng
 
Java Intro
Java IntroJava Intro
Java Intro
backdoor
 
Java tutorial for Beginners and Entry Level
Java tutorial for Beginners and Entry LevelJava tutorial for Beginners and Entry Level
Java tutorial for Beginners and Entry Level
Ramrao Desai
 

Viewers also liked (20)

15 Experts on the Art of JavaScript Programming
15 Experts on the Art of JavaScript Programming15 Experts on the Art of JavaScript Programming
15 Experts on the Art of JavaScript Programming
FusionCharts
 
Slack protips from Arkency
Slack protips from ArkencySlack protips from Arkency
Slack protips from Arkency
Andrzej Krzywda
 
The JavaScript Programming Primer
The JavaScript  Programming PrimerThe JavaScript  Programming Primer
The JavaScript Programming Primer
Mike Wilcox
 
Fabrication and Performance Analysis of Downdraft Biomass Gasifier Using Suga...
Fabrication and Performance Analysis of Downdraft Biomass Gasifier Using Suga...Fabrication and Performance Analysis of Downdraft Biomass Gasifier Using Suga...
Fabrication and Performance Analysis of Downdraft Biomass Gasifier Using Suga...
IJSRD
 
JavaScript 101
JavaScript 101JavaScript 101
JavaScript 101
Mindy McAdams
 
Paris Web - Javascript as a programming language
Paris Web - Javascript as a programming languageParis Web - Javascript as a programming language
Paris Web - Javascript as a programming language
Marco Cedaro
 
Reactive Programming with JavaScript
Reactive Programming with JavaScriptReactive Programming with JavaScript
Reactive Programming with JavaScript
Codemotion
 
Webinar: MSc in Software, Systems and Services Development in Global Environment
Webinar: MSc in Software, Systems and Services Development in Global EnvironmentWebinar: MSc in Software, Systems and Services Development in Global Environment
Webinar: MSc in Software, Systems and Services Development in Global Environment
Web2Present
 
Javascript Tutorial
Javascript TutorialJavascript Tutorial
Javascript Tutorial
Kang-min Liu
 
Functional Programming in JavaScript
Functional Programming in JavaScriptFunctional Programming in JavaScript
Functional Programming in JavaScript
Troy Miles
 
Biomass gasifier pune
Biomass gasifier  puneBiomass gasifier  pune
Biomass gasifier pune
road2ideas
 
Downdraft biomass gasification: experimental investigation and aspen plus sim...
Downdraft biomass gasification: experimental investigation and aspen plus sim...Downdraft biomass gasification: experimental investigation and aspen plus sim...
Downdraft biomass gasification: experimental investigation and aspen plus sim...
Antonio Geraldo de Paula Oliveira
 
Biomass Gasification presentation
Biomass Gasification presentationBiomass Gasification presentation
Biomass Gasification presentation
Pritish Shardul
 
Bio Mass Gasifier
Bio Mass GasifierBio Mass Gasifier
Bio Mass Gasifier
Rochester Institute of Technology
 
Biomass Gasification
Biomass GasificationBiomass Gasification
Biomass Gasification
Er Soumyabrata Basak
 
Biomass heat and power - gasification CHP with universal biomass gasifier
Biomass heat and power - gasification CHP with universal biomass gasifierBiomass heat and power - gasification CHP with universal biomass gasifier
Biomass heat and power - gasification CHP with universal biomass gasifier
Rado Irgl
 
biomass gasification
biomass gasificationbiomass gasification
biomass gasification
Akepati S. Reddy
 
Biomass gassifier
Biomass gassifierBiomass gassifier
Biomass gassifier
Aravind Rajan
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
Bryan Basham
 
Object oriented programming in JavaScript
Object oriented programming in JavaScriptObject oriented programming in JavaScript
Object oriented programming in JavaScript
Aditya Majety
 
15 Experts on the Art of JavaScript Programming
15 Experts on the Art of JavaScript Programming15 Experts on the Art of JavaScript Programming
15 Experts on the Art of JavaScript Programming
FusionCharts
 
Slack protips from Arkency
Slack protips from ArkencySlack protips from Arkency
Slack protips from Arkency
Andrzej Krzywda
 
The JavaScript Programming Primer
The JavaScript  Programming PrimerThe JavaScript  Programming Primer
The JavaScript Programming Primer
Mike Wilcox
 
Fabrication and Performance Analysis of Downdraft Biomass Gasifier Using Suga...
Fabrication and Performance Analysis of Downdraft Biomass Gasifier Using Suga...Fabrication and Performance Analysis of Downdraft Biomass Gasifier Using Suga...
Fabrication and Performance Analysis of Downdraft Biomass Gasifier Using Suga...
IJSRD
 
Paris Web - Javascript as a programming language
Paris Web - Javascript as a programming languageParis Web - Javascript as a programming language
Paris Web - Javascript as a programming language
Marco Cedaro
 
Reactive Programming with JavaScript
Reactive Programming with JavaScriptReactive Programming with JavaScript
Reactive Programming with JavaScript
Codemotion
 
Webinar: MSc in Software, Systems and Services Development in Global Environment
Webinar: MSc in Software, Systems and Services Development in Global EnvironmentWebinar: MSc in Software, Systems and Services Development in Global Environment
Webinar: MSc in Software, Systems and Services Development in Global Environment
Web2Present
 
Javascript Tutorial
Javascript TutorialJavascript Tutorial
Javascript Tutorial
Kang-min Liu
 
Functional Programming in JavaScript
Functional Programming in JavaScriptFunctional Programming in JavaScript
Functional Programming in JavaScript
Troy Miles
 
Biomass gasifier pune
Biomass gasifier  puneBiomass gasifier  pune
Biomass gasifier pune
road2ideas
 
Downdraft biomass gasification: experimental investigation and aspen plus sim...
Downdraft biomass gasification: experimental investigation and aspen plus sim...Downdraft biomass gasification: experimental investigation and aspen plus sim...
Downdraft biomass gasification: experimental investigation and aspen plus sim...
Antonio Geraldo de Paula Oliveira
 
Biomass Gasification presentation
Biomass Gasification presentationBiomass Gasification presentation
Biomass Gasification presentation
Pritish Shardul
 
Biomass heat and power - gasification CHP with universal biomass gasifier
Biomass heat and power - gasification CHP with universal biomass gasifierBiomass heat and power - gasification CHP with universal biomass gasifier
Biomass heat and power - gasification CHP with universal biomass gasifier
Rado Irgl
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
Bryan Basham
 
Object oriented programming in JavaScript
Object oriented programming in JavaScriptObject oriented programming in JavaScript
Object oriented programming in JavaScript
Aditya Majety
 
Ad

Similar to The JavaScript Programming Language (20)

Javascript
JavascriptJavascript
Javascript
vikram singh
 
Javascript
JavascriptJavascript
Javascript
vikram singh
 
Javascript
JavascriptJavascript
Javascript
Sunil Thakur
 
javascript teach
javascript teachjavascript teach
javascript teach
guest3732fa
 
JSBootcamp_White
JSBootcamp_WhiteJSBootcamp_White
JSBootcamp_White
guest3732fa
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side Javascript
Julie Iskander
 
Ajax and JavaScript Bootcamp
Ajax and JavaScript BootcampAjax and JavaScript Bootcamp
Ajax and JavaScript Bootcamp
AndreCharland
 
Cordova training : Day 3 - Introduction to Javascript
Cordova training : Day 3 - Introduction to JavascriptCordova training : Day 3 - Introduction to Javascript
Cordova training : Day 3 - Introduction to Javascript
Binu Paul
 
Javascript essentials
Javascript essentialsJavascript essentials
Javascript essentials
Bedis ElAchèche
 
An introduction to javascript
An introduction to javascriptAn introduction to javascript
An introduction to javascript
MD Sayem Ahmed
 
Java script final presentation
Java script final presentationJava script final presentation
Java script final presentation
Adhoura Academy
 
fundamentals of JavaScript for students.ppt
fundamentals of JavaScript for students.pptfundamentals of JavaScript for students.ppt
fundamentals of JavaScript for students.ppt
dejen6
 
Basics of Javascript
Basics of JavascriptBasics of Javascript
Basics of Javascript
Universe41
 
JavaScript.pptx
JavaScript.pptxJavaScript.pptx
JavaScript.pptx
KennyPratheepKumar
 
JavaScript for beginners
JavaScript for beginners JavaScript for beginners
JavaScript for beginners
Shahrukh Ali Khan
 
Java Script Language Tutorial
Java Script Language TutorialJava Script Language Tutorial
Java Script Language Tutorial
vikram singh
 
LinkedIn TBC JavaScript 100: Intro
LinkedIn TBC JavaScript 100: IntroLinkedIn TBC JavaScript 100: Intro
LinkedIn TBC JavaScript 100: Intro
Adam Crabtree
 
introduction to javascript concepts .ppt
introduction to javascript concepts .pptintroduction to javascript concepts .ppt
introduction to javascript concepts .ppt
ansariparveen06
 
An Introduction to JavaScript
An Introduction to JavaScriptAn Introduction to JavaScript
An Introduction to JavaScript
tonyh1
 
Paca java script slid
Paca java script slidPaca java script slid
Paca java script slid
pacatarpit
 
javascript teach
javascript teachjavascript teach
javascript teach
guest3732fa
 
JSBootcamp_White
JSBootcamp_WhiteJSBootcamp_White
JSBootcamp_White
guest3732fa
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side Javascript
Julie Iskander
 
Ajax and JavaScript Bootcamp
Ajax and JavaScript BootcampAjax and JavaScript Bootcamp
Ajax and JavaScript Bootcamp
AndreCharland
 
Cordova training : Day 3 - Introduction to Javascript
Cordova training : Day 3 - Introduction to JavascriptCordova training : Day 3 - Introduction to Javascript
Cordova training : Day 3 - Introduction to Javascript
Binu Paul
 
An introduction to javascript
An introduction to javascriptAn introduction to javascript
An introduction to javascript
MD Sayem Ahmed
 
Java script final presentation
Java script final presentationJava script final presentation
Java script final presentation
Adhoura Academy
 
fundamentals of JavaScript for students.ppt
fundamentals of JavaScript for students.pptfundamentals of JavaScript for students.ppt
fundamentals of JavaScript for students.ppt
dejen6
 
Basics of Javascript
Basics of JavascriptBasics of Javascript
Basics of Javascript
Universe41
 
Java Script Language Tutorial
Java Script Language TutorialJava Script Language Tutorial
Java Script Language Tutorial
vikram singh
 
LinkedIn TBC JavaScript 100: Intro
LinkedIn TBC JavaScript 100: IntroLinkedIn TBC JavaScript 100: Intro
LinkedIn TBC JavaScript 100: Intro
Adam Crabtree
 
introduction to javascript concepts .ppt
introduction to javascript concepts .pptintroduction to javascript concepts .ppt
introduction to javascript concepts .ppt
ansariparveen06
 
An Introduction to JavaScript
An Introduction to JavaScriptAn Introduction to JavaScript
An Introduction to JavaScript
tonyh1
 
Paca java script slid
Paca java script slidPaca java script slid
Paca java script slid
pacatarpit
 
Ad

More from Raghavan Mohan (17)

Accelerate with BIRT and Actuate11
Accelerate with BIRT and Actuate11Accelerate with BIRT and Actuate11
Accelerate with BIRT and Actuate11
Raghavan Mohan
 
Who is BIRT
Who is BIRTWho is BIRT
Who is BIRT
Raghavan Mohan
 
Introduction to BIRT
Introduction to BIRTIntroduction to BIRT
Introduction to BIRT
Raghavan Mohan
 
Sachin Tendulkar Resume
Sachin Tendulkar ResumeSachin Tendulkar Resume
Sachin Tendulkar Resume
Raghavan Mohan
 
Manmohan Singh Resume
Manmohan Singh ResumeManmohan Singh Resume
Manmohan Singh Resume
Raghavan Mohan
 
Senator Barrack Obama Resume
Senator Barrack Obama ResumeSenator Barrack Obama Resume
Senator Barrack Obama Resume
Raghavan Mohan
 
Java, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialJava, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorial
Raghavan Mohan
 
Java/J2EE CV Guide
Java/J2EE CV GuideJava/J2EE CV Guide
Java/J2EE CV Guide
Raghavan Mohan
 
Java/J2EE Companion
Java/J2EE CompanionJava/J2EE Companion
Java/J2EE Companion
Raghavan Mohan
 
Hibernate, Spring, Eclipse, HSQL Database & Maven tutorial
Hibernate, Spring, Eclipse, HSQL Database & Maven tutorialHibernate, Spring, Eclipse, HSQL Database & Maven tutorial
Hibernate, Spring, Eclipse, HSQL Database & Maven tutorial
Raghavan Mohan
 
Ajax, JSF, Facelets, Eclipse & Maven tutorials
Ajax, JSF, Facelets, Eclipse & Maven tutorialsAjax, JSF, Facelets, Eclipse & Maven tutorials
Ajax, JSF, Facelets, Eclipse & Maven tutorials
Raghavan Mohan
 
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorialsSpring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
Raghavan Mohan
 
JSF, Facelets, Spring-JSF & Maven
JSF, Facelets, Spring-JSF & MavenJSF, Facelets, Spring-JSF & Maven
JSF, Facelets, Spring-JSF & Maven
Raghavan Mohan
 
Jsf, facelets, spring, hibernate, maven2
Jsf, facelets, spring, hibernate, maven2Jsf, facelets, spring, hibernate, maven2
Jsf, facelets, spring, hibernate, maven2
Raghavan Mohan
 
Fast Track to Ajax.
Fast Track to Ajax.Fast Track to Ajax.
Fast Track to Ajax.
Raghavan Mohan
 
23617968 digit-fast-track-jan-2009-php
23617968 digit-fast-track-jan-2009-php23617968 digit-fast-track-jan-2009-php
23617968 digit-fast-track-jan-2009-php
Raghavan Mohan
 
Quality - Douglas Crockford
Quality - Douglas CrockfordQuality - Douglas Crockford
Quality - Douglas Crockford
Raghavan Mohan
 
Accelerate with BIRT and Actuate11
Accelerate with BIRT and Actuate11Accelerate with BIRT and Actuate11
Accelerate with BIRT and Actuate11
Raghavan Mohan
 
Sachin Tendulkar Resume
Sachin Tendulkar ResumeSachin Tendulkar Resume
Sachin Tendulkar Resume
Raghavan Mohan
 
Senator Barrack Obama Resume
Senator Barrack Obama ResumeSenator Barrack Obama Resume
Senator Barrack Obama Resume
Raghavan Mohan
 
Java, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialJava, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorial
Raghavan Mohan
 
Hibernate, Spring, Eclipse, HSQL Database & Maven tutorial
Hibernate, Spring, Eclipse, HSQL Database & Maven tutorialHibernate, Spring, Eclipse, HSQL Database & Maven tutorial
Hibernate, Spring, Eclipse, HSQL Database & Maven tutorial
Raghavan Mohan
 
Ajax, JSF, Facelets, Eclipse & Maven tutorials
Ajax, JSF, Facelets, Eclipse & Maven tutorialsAjax, JSF, Facelets, Eclipse & Maven tutorials
Ajax, JSF, Facelets, Eclipse & Maven tutorials
Raghavan Mohan
 
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorialsSpring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
Raghavan Mohan
 
JSF, Facelets, Spring-JSF & Maven
JSF, Facelets, Spring-JSF & MavenJSF, Facelets, Spring-JSF & Maven
JSF, Facelets, Spring-JSF & Maven
Raghavan Mohan
 
Jsf, facelets, spring, hibernate, maven2
Jsf, facelets, spring, hibernate, maven2Jsf, facelets, spring, hibernate, maven2
Jsf, facelets, spring, hibernate, maven2
Raghavan Mohan
 
23617968 digit-fast-track-jan-2009-php
23617968 digit-fast-track-jan-2009-php23617968 digit-fast-track-jan-2009-php
23617968 digit-fast-track-jan-2009-php
Raghavan Mohan
 
Quality - Douglas Crockford
Quality - Douglas CrockfordQuality - Douglas Crockford
Quality - Douglas Crockford
Raghavan Mohan
 

Recently uploaded (20)

Creating an Accessible Future-How AI-powered Accessibility Testing is Shaping...
Creating an Accessible Future-How AI-powered Accessibility Testing is Shaping...Creating an Accessible Future-How AI-powered Accessibility Testing is Shaping...
Creating an Accessible Future-How AI-powered Accessibility Testing is Shaping...
Impelsys Inc.
 
Introduction to Typescript - GDG On Campus EUE
Introduction to Typescript - GDG On Campus EUEIntroduction to Typescript - GDG On Campus EUE
Introduction to Typescript - GDG On Campus EUE
Google Developer Group On Campus European Universities in Egypt
 
Bridging the divide: A conversation on tariffs today in the book industry - T...
Bridging the divide: A conversation on tariffs today in the book industry - T...Bridging the divide: A conversation on tariffs today in the book industry - T...
Bridging the divide: A conversation on tariffs today in the book industry - T...
BookNet Canada
 
Jeremy Millul - A Talented Software Developer
Jeremy Millul - A Talented Software DeveloperJeremy Millul - A Talented Software Developer
Jeremy Millul - A Talented Software Developer
Jeremy Millul
 
DevOps in the Modern Era - Thoughtfully Critical Podcast
DevOps in the Modern Era - Thoughtfully Critical PodcastDevOps in the Modern Era - Thoughtfully Critical Podcast
DevOps in the Modern Era - Thoughtfully Critical Podcast
Chris Wahl
 
Establish Visibility and Manage Risk in the Supply Chain with Anchore SBOM
Establish Visibility and Manage Risk in the Supply Chain with Anchore SBOMEstablish Visibility and Manage Risk in the Supply Chain with Anchore SBOM
Establish Visibility and Manage Risk in the Supply Chain with Anchore SBOM
Anchore
 
AI Agents in Logistics and Supply Chain Applications Benefits and Implementation
AI Agents in Logistics and Supply Chain Applications Benefits and ImplementationAI Agents in Logistics and Supply Chain Applications Benefits and Implementation
AI Agents in Logistics and Supply Chain Applications Benefits and Implementation
Christine Shepherd
 
TrustArc Webinar - 2025 Global Privacy Survey
TrustArc Webinar - 2025 Global Privacy SurveyTrustArc Webinar - 2025 Global Privacy Survey
TrustArc Webinar - 2025 Global Privacy Survey
TrustArc
 
Oracle Cloud Infrastructure Generative AI Professional
Oracle Cloud Infrastructure Generative AI ProfessionalOracle Cloud Infrastructure Generative AI Professional
Oracle Cloud Infrastructure Generative AI Professional
VICTOR MAESTRE RAMIREZ
 
How to Detect Outliers in IBM SPSS Statistics.pptx
How to Detect Outliers in IBM SPSS Statistics.pptxHow to Detect Outliers in IBM SPSS Statistics.pptx
How to Detect Outliers in IBM SPSS Statistics.pptx
Version 1 Analytics
 
End-to-end Assurance for SD-WAN & SASE with ThousandEyes
End-to-end Assurance for SD-WAN & SASE with ThousandEyesEnd-to-end Assurance for SD-WAN & SASE with ThousandEyes
End-to-end Assurance for SD-WAN & SASE with ThousandEyes
ThousandEyes
 
Improving Developer Productivity With DORA, SPACE, and DevEx
Improving Developer Productivity With DORA, SPACE, and DevExImproving Developer Productivity With DORA, SPACE, and DevEx
Improving Developer Productivity With DORA, SPACE, and DevEx
Justin Reock
 
“How Qualcomm Is Powering AI-driven Multimedia at the Edge,” a Presentation f...
“How Qualcomm Is Powering AI-driven Multimedia at the Edge,” a Presentation f...“How Qualcomm Is Powering AI-driven Multimedia at the Edge,” a Presentation f...
“How Qualcomm Is Powering AI-driven Multimedia at the Edge,” a Presentation f...
Edge AI and Vision Alliance
 
Data Virtualization: Bringing the Power of FME to Any Application
Data Virtualization: Bringing the Power of FME to Any ApplicationData Virtualization: Bringing the Power of FME to Any Application
Data Virtualization: Bringing the Power of FME to Any Application
Safe Software
 
How Advanced Environmental Detection Is Revolutionizing Oil & Gas Safety.pdf
How Advanced Environmental Detection Is Revolutionizing Oil & Gas Safety.pdfHow Advanced Environmental Detection Is Revolutionizing Oil & Gas Safety.pdf
How Advanced Environmental Detection Is Revolutionizing Oil & Gas Safety.pdf
Rejig Digital
 
ISOIEC 42005 Revolutionalises AI Impact Assessment.pptx
ISOIEC 42005 Revolutionalises AI Impact Assessment.pptxISOIEC 42005 Revolutionalises AI Impact Assessment.pptx
ISOIEC 42005 Revolutionalises AI Impact Assessment.pptx
AyilurRamnath1
 
Jira Administration Training – Day 1 : Introduction
Jira Administration Training – Day 1 : IntroductionJira Administration Training – Day 1 : Introduction
Jira Administration Training – Day 1 : Introduction
Ravi Teja
 
Mastering AI Workflows with FME - Peak of Data & AI 2025
Mastering AI Workflows with FME - Peak of Data & AI 2025Mastering AI Workflows with FME - Peak of Data & AI 2025
Mastering AI Workflows with FME - Peak of Data & AI 2025
Safe Software
 
ELNL2025 - Unlocking the Power of Sensitivity Labels - A Comprehensive Guide....
ELNL2025 - Unlocking the Power of Sensitivity Labels - A Comprehensive Guide....ELNL2025 - Unlocking the Power of Sensitivity Labels - A Comprehensive Guide....
ELNL2025 - Unlocking the Power of Sensitivity Labels - A Comprehensive Guide....
Jasper Oosterveld
 
vertical-cnc-processing-centers-drillteq-v-200-en.pdf
vertical-cnc-processing-centers-drillteq-v-200-en.pdfvertical-cnc-processing-centers-drillteq-v-200-en.pdf
vertical-cnc-processing-centers-drillteq-v-200-en.pdf
AmirStern2
 
Creating an Accessible Future-How AI-powered Accessibility Testing is Shaping...
Creating an Accessible Future-How AI-powered Accessibility Testing is Shaping...Creating an Accessible Future-How AI-powered Accessibility Testing is Shaping...
Creating an Accessible Future-How AI-powered Accessibility Testing is Shaping...
Impelsys Inc.
 
Bridging the divide: A conversation on tariffs today in the book industry - T...
Bridging the divide: A conversation on tariffs today in the book industry - T...Bridging the divide: A conversation on tariffs today in the book industry - T...
Bridging the divide: A conversation on tariffs today in the book industry - T...
BookNet Canada
 
Jeremy Millul - A Talented Software Developer
Jeremy Millul - A Talented Software DeveloperJeremy Millul - A Talented Software Developer
Jeremy Millul - A Talented Software Developer
Jeremy Millul
 
DevOps in the Modern Era - Thoughtfully Critical Podcast
DevOps in the Modern Era - Thoughtfully Critical PodcastDevOps in the Modern Era - Thoughtfully Critical Podcast
DevOps in the Modern Era - Thoughtfully Critical Podcast
Chris Wahl
 
Establish Visibility and Manage Risk in the Supply Chain with Anchore SBOM
Establish Visibility and Manage Risk in the Supply Chain with Anchore SBOMEstablish Visibility and Manage Risk in the Supply Chain with Anchore SBOM
Establish Visibility and Manage Risk in the Supply Chain with Anchore SBOM
Anchore
 
AI Agents in Logistics and Supply Chain Applications Benefits and Implementation
AI Agents in Logistics and Supply Chain Applications Benefits and ImplementationAI Agents in Logistics and Supply Chain Applications Benefits and Implementation
AI Agents in Logistics and Supply Chain Applications Benefits and Implementation
Christine Shepherd
 
TrustArc Webinar - 2025 Global Privacy Survey
TrustArc Webinar - 2025 Global Privacy SurveyTrustArc Webinar - 2025 Global Privacy Survey
TrustArc Webinar - 2025 Global Privacy Survey
TrustArc
 
Oracle Cloud Infrastructure Generative AI Professional
Oracle Cloud Infrastructure Generative AI ProfessionalOracle Cloud Infrastructure Generative AI Professional
Oracle Cloud Infrastructure Generative AI Professional
VICTOR MAESTRE RAMIREZ
 
How to Detect Outliers in IBM SPSS Statistics.pptx
How to Detect Outliers in IBM SPSS Statistics.pptxHow to Detect Outliers in IBM SPSS Statistics.pptx
How to Detect Outliers in IBM SPSS Statistics.pptx
Version 1 Analytics
 
End-to-end Assurance for SD-WAN & SASE with ThousandEyes
End-to-end Assurance for SD-WAN & SASE with ThousandEyesEnd-to-end Assurance for SD-WAN & SASE with ThousandEyes
End-to-end Assurance for SD-WAN & SASE with ThousandEyes
ThousandEyes
 
Improving Developer Productivity With DORA, SPACE, and DevEx
Improving Developer Productivity With DORA, SPACE, and DevExImproving Developer Productivity With DORA, SPACE, and DevEx
Improving Developer Productivity With DORA, SPACE, and DevEx
Justin Reock
 
“How Qualcomm Is Powering AI-driven Multimedia at the Edge,” a Presentation f...
“How Qualcomm Is Powering AI-driven Multimedia at the Edge,” a Presentation f...“How Qualcomm Is Powering AI-driven Multimedia at the Edge,” a Presentation f...
“How Qualcomm Is Powering AI-driven Multimedia at the Edge,” a Presentation f...
Edge AI and Vision Alliance
 
Data Virtualization: Bringing the Power of FME to Any Application
Data Virtualization: Bringing the Power of FME to Any ApplicationData Virtualization: Bringing the Power of FME to Any Application
Data Virtualization: Bringing the Power of FME to Any Application
Safe Software
 
How Advanced Environmental Detection Is Revolutionizing Oil & Gas Safety.pdf
How Advanced Environmental Detection Is Revolutionizing Oil & Gas Safety.pdfHow Advanced Environmental Detection Is Revolutionizing Oil & Gas Safety.pdf
How Advanced Environmental Detection Is Revolutionizing Oil & Gas Safety.pdf
Rejig Digital
 
ISOIEC 42005 Revolutionalises AI Impact Assessment.pptx
ISOIEC 42005 Revolutionalises AI Impact Assessment.pptxISOIEC 42005 Revolutionalises AI Impact Assessment.pptx
ISOIEC 42005 Revolutionalises AI Impact Assessment.pptx
AyilurRamnath1
 
Jira Administration Training – Day 1 : Introduction
Jira Administration Training – Day 1 : IntroductionJira Administration Training – Day 1 : Introduction
Jira Administration Training – Day 1 : Introduction
Ravi Teja
 
Mastering AI Workflows with FME - Peak of Data & AI 2025
Mastering AI Workflows with FME - Peak of Data & AI 2025Mastering AI Workflows with FME - Peak of Data & AI 2025
Mastering AI Workflows with FME - Peak of Data & AI 2025
Safe Software
 
ELNL2025 - Unlocking the Power of Sensitivity Labels - A Comprehensive Guide....
ELNL2025 - Unlocking the Power of Sensitivity Labels - A Comprehensive Guide....ELNL2025 - Unlocking the Power of Sensitivity Labels - A Comprehensive Guide....
ELNL2025 - Unlocking the Power of Sensitivity Labels - A Comprehensive Guide....
Jasper Oosterveld
 
vertical-cnc-processing-centers-drillteq-v-200-en.pdf
vertical-cnc-processing-centers-drillteq-v-200-en.pdfvertical-cnc-processing-centers-drillteq-v-200-en.pdf
vertical-cnc-processing-centers-drillteq-v-200-en.pdf
AmirStern2
 

The JavaScript Programming Language

  • 1. The JavaScript Programming Language Douglas Crockford
  • 2. Overview History Language Advanced Features Platforms Standards Style
  • 3. The World's Most Misunderstood Programming Language
  • 4. Sources of Misunderstanding The Name Mispositioning Design Errors Bad Implementations The Browser Bad Books Substandard Standard JavaScript is a Functional Language
  • 5. History 1992 Oak, Gosling at Sun & FirstPerson 1995 HotJava LiveScript, Eich at Netscape 1996 JScript at Microsoft 1998 ECMAScript
  • 6. Not a Web Toy It is a real language Small, but sophisticated It is not a subset of Java
  • 7. Key Ideas Load and go delivery Loose typing Objects as general containers Prototypal inheritance Lambda Linkage though global variables
  • 8. Values Numbers Strings Booleans Objects null undefined
  • 9. Numbers Only one number type No integers 64-bit floating point IEEE-754 (aka “ Double ”) Does not map well to common understanding of arithmetic: 0.1 + 0.2 = 0.30000000000000004
  • 10. NaN Special number: Not a Number Result of undefined or erroneous operations Toxic: any arithmetic operation with NaN as an input will have NaN as a result NaN is not equal to anything, including NaN
  • 11. Number function Number( value ) Converts the value into a number. It produces NaN if it has a problem. Similar to + prefix operator.
  • 12. parseInt function parseInt( value , 10) Converts the value into a number. It stops at the first non-digit character. The radix ( 10 ) should be required. parseInt(&quot;08&quot;) === 0 parseInt(&quot;08&quot;, 10) === 8
  • 13. Math Math object is modeled on Java's Math class. It contains abs absolute value floor integer log logarithm max maximum pow raise to a power random random number round nearest integer sin sine sqrt square root
  • 14. Strings Sequence of 0 or more 16-bit characters UCS-2, not quite UTF-16 No awareness of surrogate pairs No separate character type Characters are represented as strings with a length of 1 Strings are immutable Similar strings are equal ( == ) String literals can use single or double quotes
  • 15. String length string .length The length property determines the number of 16-bit characters in a string.
  • 16. String function String( value ) Converts value to a string
  • 17. String Methods charAt concat indexOf lastIndexOf match replace search slice split substring toLowerCase toUpperCase
  • 19. Boolean function Boolean( value ) returns true if value is truthy returns false if value is falsy Similar to !! prefix operator
  • 20. null A value that isn't anything
  • 21. undefined A value that isn't even that The default value for variables and parameters The value of missing members in objects
  • 22. Falsy values false null undefined &quot;&quot; ( empty string) 0 NaN All other values (including all objects) are truthy. &quot;0&quot; &quot;false&quot;
  • 24. Dynamic Objects Unification of Object and Hashtable new Object() produces an empty container of name/value pairs A name can be any string, a value can be any value except undefined members can be accessed with dot notation or subscript notation No hash nature is visible (no hash codes or rehash methods)
  • 25. Loosely Typed Any of these types can be stored in an variable, or passed as a parameter to any function The language is not &quot;untyped&quot;
  • 26. C JavaScript is syntactically a C family language It differs from C mainly in its type system, which allows functions to be values
  • 27. Identifiers Starts with a letter or _ or $ Followed by zero or more letters, digits, _ or $ By convention, all variables, parameters, members, and function names start with lower case Except for constructors which start with upper case Initial _ should be reserved for implementations $ should be reserved for machines.
  • 28. Reserved Words abstract boolean break byte case catch char class const continue debugger default delete do double else enum export extends false final finally float for function goto if implements import in instanceof int interface long native new null package private protected public return short static super switch synchronized this throw throws transient true try typeof var volatile void while with
  • 29. Comments // slashslash line comment /* slashstar block comment */
  • 30. Operators Arithmetic + - * / % Comparison == != < > <= >= Logical && || ! Bitwise & | ^ >> >>> << Ternary ?:
  • 31. + Addition and concatenation If both operands are numbers, then add them else convert them both to strings concatenate them '$' + 3 + 4 = '$34'
  • 32. + Unary operator can convert strings to numbers +&quot;42&quot; = 42 Also Number(&quot;42&quot;) = 42 Also parseInt(&quot;42&quot;, 10) = 42 +&quot;3&quot; + (+&quot;4&quot;) = 7
  • 33. / Division of two integers can produce a non-integer result 10 / 3 = 3.3333333333333335
  • 34. == != Equal and not equal These operators can do type coercion It is better to use === and !== , which do not do type coercion.
  • 35. && The guard operator, aka logical and If first operand is truthy then result is second operand else result is first operand It can be used to avoid null references if (a) { return a.member; } else { return a; } can be written as return a && a.member;
  • 36. || The default operator, aka logical or If first operand is truthy then result is first operand else result is second operand It can be used to fill in default values. var last = input || nr_items; (If input is truthy, then last is input, otherwise set last to nr_items .)
  • 37. ! Prefix logical not operator. If the operand is truthy, the result is false . Otherwise, the result is true . !! produces booleans.
  • 38. Bitwise & | ^ >> >>> << The bitwise operators convert the operand to a 32-bit signed integer, and turn the result back into 64-bit floating point.
  • 39. Statements expression if switch while do for break continue return try/throw
  • 40. Break statement Statements can have labels. Break statements can refer to those labels. loop: for (;;) { ... if (...) { break loop ; } ... }
  • 41. For statement Iterate through all of the elements of an array: for (var i = 0; i < array .length; i += 1) { // within the loop, // i is the index of the current member // array [ i ] is the current element }
  • 42. For statement Iterate through all of the members of an object: for (var name in object ) { if ( object .hasOwnProperty( name )) { // within the loop, // name is the key of current member // object [ name ] is the current value } }
  • 43. Switch statement Multiway branch The switch value does not need to a number. It can be a string. The case values can be expressions.
  • 44. Switch statement switch ( expression ) { case ';': case ',': case '.': punctuation(); break; default: noneOfTheAbove(); }
  • 45. Throw statement throw new Error( reason ); throw { name : exceptionName , message : reason };
  • 46. Try statement try { ... } catch ( e ) { switch ( e .name) { case 'Error': ... break; default: throw e ; } }
  • 47. Try Statement The JavaScript implementation can produce these exception names: 'Error' 'EvalError' 'RangeError' 'SyntaxError' 'TypeError' 'URIError'
  • 48. With statement Intended as a short-hand Ambiguous Error-prone Don't use it with (o) { foo = null; } o.foo = null; foo = null;
  • 49. Function statement function name ( parameters ) { statements ; }
  • 50. Var statement Defines variables within a function. Types are not specified. Initial values are optional. var name; var nrErrors = 0; var a, b, c;
  • 51. Scope In JavaScript, { blocks } do not have scope. Only functions have scope. Vars defined in a function are not visible outside of the function.
  • 52. Return statement return expression ; or return; If there is no expression , then the return value is undefined . Except for constructors, whose default return value is this .
  • 53. Objects Everything else is objects Objects can contain data and methods Objects can inherit from other objects.
  • 54. Collections An object is an unordered collection of name/value pairs Names are strings Values are any type, including other objects Good for representing records and trees Every object is a little database
  • 55. Object Literals Object literals are wrapped in { } Names can be names or strings Values can be expressions : separates names and values , separates pairs Object literals can be used anywhere a value can appear
  • 56. Object Literals var myObject = {name: &quot;Jack B. Nimble&quot;, 'goto': 'Jail', grade: 'A', level: 3}; var theName = myObject.name; var destination = myObject['goto']; 3 &quot;level&quot; &quot;A&quot; &quot;grade&quot; &quot;Jail&quot; &quot;goto&quot; &quot;Jack B. Nimble&quot; &quot;name&quot;
  • 57. Maker Function function maker(name, where, grade, level) { var it = {}; it.name = name; it['goto'] = where; it.grade = grade; it.level = level; return it; } myObject = maker(&quot;Jack B. Nimble&quot;, 'Jail', 'A', 3);
  • 58. Object Literals var myObject = {name: &quot;Jack B. Nimble&quot;, 'goto': 'Jail', grade: 'A', format: {type: 'rect', width: 1920, height: 1080, interlace: false, framerate: 24} };
  • 59. Object Literals var myObject = { name: &quot;Jack B. Nimble&quot;, 'goto': 'Jail', grade: 'A', format: { type: 'rect', width: 1920, height: 1080, interlace: false, framerate: 24 } };
  • 60. Object Literals myFunction({ type: 'rect', width: 1920, height: 1080 }); throw { name: 'error', message: 'out of bounds' };
  • 61. Object Literals function SuperDiv(width, height, left, top, zIndex, position, color, visibility, html, cssClass) function SuperDiv(spec)
  • 62. Object Augmentation New members can be added to any object by simple assignment There is no need to define a new class myObject.format.colorModel = 'YCgCb'; myObject[name] = value;
  • 63. Linkage Objects can be created with a secret link to another object. If an attempt to access a name fails, the secret linked object will be used. The secret link is not used when storing. New members are only added to the primary object. The object( o ) function makes a new empty object with a link to object o.
  • 64. Linkage var myNewObject = object(myOldObject); myNewObject myOldObject 3 &quot;level&quot; &quot;A&quot; &quot;grade&quot; &quot;Jail&quot; &quot;goto&quot; &quot;Jack B. Nimble&quot; &quot;name&quot;
  • 65. Linkage myNewObject.name = &quot;Tom Piperson&quot;; myNewObject.level += 1; myNewObject.crime = 'pignapping'; &quot;pignapping&quot; &quot;crime&quot; 4 &quot;level&quot; &quot;Tom Piperson&quot; &quot;name&quot; 3 &quot;level&quot; &quot;A&quot; &quot;grade&quot; &quot;Jail&quot; &quot;goto&quot; &quot;Jack B. Nimble&quot; &quot;name&quot;
  • 66. Inheritance Linkage provides simple inheritance. An object can inherit from an older object.
  • 67. Prototypal Inheritance Some languages have classes, methods, constructors, and modules. JavaScript's functions do the work of all of those. Instead of Classical Inheritance, JavaScript has Prototypal Inheritance. It accomplishes the same things, but differently. It offers greater expressive power. But it's different.
  • 68. Prototypal Inheritance Instead of organizing objects into rigid classes, new objects can be made that are similar to existing objects, and then customized. Object customization is a lot less work than making a class, and less overhead, too. One of the keys is the object(o) function. The other key is functions.
  • 69. Object Methods All objects are linked directly or indirectly to Object.prototype All objects inherit some basic methods. None of them are very useful. hasOwnProperty( name ) Is the name a true member of this object? No copy method. No equals method.
  • 70. Object Construction Make a new empty object All three of these expressions have exactly the same result: new Object() {} object(Object.prototype) {} is the preferred form.
  • 71. Reference Objects can be passed as arguments to functions, and can be returned by functions Objects are passed by reference. Objects are not passed by value. The === operator compares object references, not values true only if both operands are the same object
  • 72. Delete Members can be removed from an object with the delete operator delete myObject [ name ];
  • 73. Arrays Array inherits from Object . Indexes are converted to strings and used as names for retrieving values. Very efficient for sparse arrays. Not very efficient in most other cases. One advantage: No need to provide a length or type when creating an array.
  • 74. length Arrays, unlike objects, have a special length member. It is always 1 larger than the highest integer subscript. It allows use of the traditional for statement. for (i = 0; i < a.length; i += 1) { ... } Do not use for .. in with arrays
  • 75. Array Literals An array literal uses [] It can contain any number of expressions, separated by commas myList = ['oats', 'peas', 'beans']; New items can be appended myList[myList.length] = 'barley'; The dot notation should not be used with arrays. [] is preferred to new Array() .
  • 76. Array Methods concat join pop push slice sort splice
  • 77. Deleting Elements delete array[number] Removes the element, but leaves a hole in the numbering. array.splice(number, 1) Removes the element and renumbers all the following elements.
  • 78. Deleting Elements myArray = ['a', 'b' , 'c', 'd']; delete myArray[1]; // ['a', undefined , 'c', 'd'] myArray.splice(1, 1); // ['a', 'c', 'd']
  • 79. Arrays v Objects Use objects when the names are arbitrary strings. Use arrays when the names are sequential integers. Don't get confused by the term Associative Array.
  • 80. Distinguishing Arrays value.constructor === Array value instanceof Array Neither of these work when the value comes from a different frame.
  • 81. Arrays and Inheritance Don’t use arrays as prototypes. The object produced this way does not have array nature. It will inherit the array's values and methods, but not its length . You can augment an individual array. Assign a method to it. This works because arrays are objects. You can augment all arrays. Assign methods to Array.prototype
  • 82. Functions Functions are first-class objects Functions can be passed, returned, and stored just like any other value Functions inherit from Object and can store name/value pairs.
  • 83. Function operator The function operator takes an optional name, a parameter list, and a block of statements, and returns a function object. function name ( parameters ) { statements } A function can appear anywhere that an expression can appear.
  • 84. lambda What JavaScript calls function , other languages call lambda . It is a source of enormous expressive power. Unlike most power-constructs, it is secure.
  • 85. Function statement The function statement is just a short-hand for a var statement with a function value. function foo() {} expands to var foo = function foo() {};
  • 86. Inner functions Functions do not all have to be defined at the top level (or left edge). Functions can be defined inside of other functions.
  • 87. Scope An inner function has access to the variables and parameters of functions that it is contained within. This is known as Static Scoping or Lexical Scoping.
  • 88. Closure The scope that an inner function enjoys continues even after the parent functions have returned. This is called closure .
  • 89. Example function fade(id) { var dom = document.getElementById(id), level = 1; function step () { var h = level.toString(16); dom.style.backgroundColor = '#FFFF' + h + h; if (level < 15) { level += 1; setTimeout(step, 100); } } setTimeout(step, 100); }
  • 90. Function Objects Functions are objects, so they can contain name/value pairs. This can serve the same purpose as static members in other languages.
  • 91. Method Since functions are values, functions can be stored in objects. A function in an object is called a method .
  • 92. Invocation If a function is called with too many arguments, the extra arguments are ignored. If a function is called with too few arguments, the missing values will be undefined . There is no implicit type checking on the arguments.
  • 93. Invocation There are four ways to call a function: Function form functionObject ( arguments ) Method form thisObject . methodName ( arguments ) thisObject [&quot; methodName &quot;]( arguments ) Constructor form new functionObject ( arguments ) Apply form functionObject .apply( thisObject , [ arguments ])
  • 94. Method form thisObject . methodName ( arguments ) When a function is called in the method form, this is set to thisObject , the object containing the function. This allows methods to have a reference to the object of interest.
  • 95. Function form functionObject ( arguments ) When a function is called in the function form, this is set to the global object. That is not very useful. It makes it harder to write helper functions within a method because the helper function does not get access to the outer this . var that = this;
  • 96. Constructor form new functionObject ( arguments ) When a function is called with the new operator, a new object is created and assigned to this . If there is not an explicit return value, then this will be returned.
  • 97. this this is an extra parameter. Its value depends on the calling form. this gives methods access to their objects. this is bound at invocation time. the new object constructor the object method the global object function this Invocation form
  • 98. arguments When a function is invoked, in addition to its parameters, it also gets a special parameter called arguments . It contains all of the arguments from the invocation. It is an array-like object. arguments.length is the number of arguments passed.
  • 99. Example function sum() { var i, n = arguments .length, total = 0; for (i = 0; i < n; i += 1) { total += arguments [i]; } return total; }
  • 100. Augmenting Built-in Types Object.prototype Array.prototype Function.prototype Number.prototype String.prototype Boolean.prototype
  • 101. trim String.prototype.trim = function () { return this.replace( /^\s*(\S*(\s+\S+)*)\s*$/, &quot;$1&quot;); };
  • 102. supplant var template = '<table border=&quot; {border} &quot;>' + '<tr><th>Last</th><td> {last} </td></tr>' + '<tr><th>First</th><td> {first} </td></tr>' + '</table>'; var data = { first: &quot;Carl&quot;, last: &quot;Hollywood&quot;, border: 2 }; mydiv.innerHTML = template.supplant(data);
  • 103. supplant String.prototype.supplant = function (o) { return this.replace(/{([^{}]*)}/g, function (a, b) { var r = o[b]; return typeof r === 'string' ? r : a; } ); };
  • 104. typeof The typeof prefix operator returns a string identifying the type of a value. 'undefined' undefined 'object' null 'boolean' boolean 'string' string 'number' number 'object' array 'function' function 'object' object typeof type
  • 105. eval eval( string ) The eval function compiles and executes a string and returns the result. It is what the browser uses to convert strings into actions. It is the most misused feature of the language.
  • 106. Function function new Function( parameters , body ) The Function constructor takes zero or more parameter name strings, and a body string, and uses the JavaScript compiler to produce a function object. It should only be used to compile fresh source from a server. It is closely related to eval .
  • 107. Built-in Type Wrappers Java has int and Integer , two incompatible types which can both carry the same value with differing levels of efficiency and convenience. JavaScript copied this pattern to no advantage. Avoid it. Avoid new Boolean() Avoid new String() Avoid new Number()
  • 108. Confession function object(o) { function F() {} F.prototype = o; return new F(); }
  • 109. Augmentation We can directly modify individual objects to give them just the characteristics we want. We can do this without having to create classes. We can then use our new object as the prototype for lots of new objects, each of which can also be augmented.
  • 110. Working with the Grain Classical patterns are less effective than prototypal patterns or parasitic patterns. Formal classes are not needed for reuse or extension.
  • 111. (global) Object The object that dares not speak its name. It is the container for all global variables and all built-in objects. Sometimes this points to it. var global = this; On browsers, window is the global object.
  • 112. Global variables are evil Functions within an application can clobber each other. Cooperating applications can clobber each other. Use of the global namespace must be minimized.
  • 113. Implied Global Any var which is not properly declared is assumed to be global by default. This makes it easy for people who do not know or care about encapsulation to be productive, but it makes applications less reliable. JSLint is a tool which helps identify implied globals and other weaknesses. http://www.JSLint.com
  • 114. Namespace Every object is a separate namespace. Use an object to organize your variables and functions. The YAHOO Object. <head> <script> YAHOO={}; </script> http://twiki.corp.yahoo.com/view/Devel/TheYAHOOObject
  • 115. Encapsulate Function scope can create an encapsulation. Use an anonymous function to wrap your application.
  • 116. Example YAHOO.Trivia = function () { // define your common vars here // define your common functions here return { getNextPoser: function (cat, diff) { ... }, showPoser: function () { ... } }; } ();
  • 117. Thinking about type Trading type-safety for dynamism. JavaScript has no cast operator. Reflection is really easy, and usually unnecessary. Why inheritance? Automatic casting Code reuse Trading brittleness for flexibility.
  • 118. Date The Date function is based on Java's Date class. It was not Y2K ready.
  • 119. RegExp Regular expression pattern matcher Patterns are enclosed in slashes Example: a pattern that matches regular expressions /\/(\\[^\x00-\x1f]|\[(\\[^\x00-\x1f]|[^\x00-\x1f\\\/])*\]|[^\x00-\x1f\\\/\[])+\/[gim]*/ Bizarre notation, difficult to read.
  • 120. Threads The language definition is neutral on threads Some language processors (like SpiderMonkey) provide thread support Most application environments (like browsers) do not provide it Threads are evil
  • 121. Platforms Browsers WSH and Dashboard Yahoo!Widgets DreamWeaver and Photoshop Embedded
  • 122. ActionScript Empty strings are truthy keywords are case insensitive No Unicode support No RegExp No try No statement labels || and && return booleans separate operators for strings and numbers
  • 123. E4X Extensions to ECMAScript for XML Proposed by BEA Allows <XML> literals Not compatible with ECMAScript Third Edition Not widely accepted yet Not in IE7
  • 124. ECMAScript Fourth Edition A very large set of new features are being considered. Mozilla and Opera are committed. It is not clear that Microsoft will adopt it. No word from Safari yet.
  • 125. Style Programming style isn't about personal taste. It is about rigor in expression. It is about clearness in presentation. It is about product adaptability and longevity. Good rules help us to keep the quality of our programs high.
  • 126. Style and JavaScript Style is critically important for JavaScript. The dynamic nature of the language is considered by some to be &quot;too soft&quot;. Discipline is necessary for balance. Most of the world's body of JavaScript programs is crap.
  • 127. Code Conventions for the JavaScript Programming Language http://javascript.crockford.com/code.html
  • 128. Semicolon insertion When the compiler sees an error, it attempts to replace a nearby linefeed with a semicolon and try again. This should alarm you. It can mask errors. Always use the full, correct forms, including semicolons.
  • 129. Line Ending Break a line after a punctuator: , . ; : { } ( [ = < > ? ! + - * / % ~ ^ | & == != <= >= += -= *= /= %= ^= |= &= << >> || && === !== <<= >>= >>> >>>= Do not break after a name, string, number, or ) ] ++ -- Defense against copy/paste errors.
  • 130. Comma Avoid tricky expressions using the comma operators. Do not use extra commas in array literals. Good: [1, 2, 3] Bad: [1, 2, 3,]
  • 131. Required Blocks Good: if (a) { b(); } Bad: if (a) b();
  • 132. Forbidden Blocks Blocks do not have scope in JavaScript. Blocks should only be used with structured statements function if switch while for do try
  • 133. Variables Define all variables at the beginning of the function. JavaScript does not have block scope, so their is no advantage in declaring variables at the place of their first use.
  • 134. Expression Statements Any expression can be used as a statement. That can mask errors. Only assignment expressions and invocation expressions should be used as statements. Good: foo(); Bad: foo && foo();
  • 135. switch Statement Avoid using fallthrough. Each clause should explicitly break or return or throw .
  • 136. Assignment Expressions Do not use assignment expressions in the condition parts of if , while , or for . It is more likely that if (a = b) { ... } was intended to be if (a == b) { ... } Avoid tricky expressions.
  • 137. == and != Be aware that == and != do type coercion. Bad if (a == null) { ... } Good: if (a === null) { ... } if (!a) { ... }
  • 138. Labels Use labels only on these statements: do for switch while Never use javascript: as a label.
  • 139. JSLint JSLint can help improve the robustness and portability of your programs. It enforces style rules. It can spot some errors that are very difficult to find in debugging. It can help eliminate implied globals. Currently available on the web and as a Konfabulator widget. Soon, in text editors and Eclipse. http://www.JSLint.com/
  • 140. UHOH! Universal Header Onerror Handler Inserted into 0.1% of pages Reports on JavaScript errors http://uhoh.corp.yahoo.com/
  • 141. Key Ideas Load and go delivery Loose typing Objects as general containers Prototypal inheritance Lambda Linkage though global variables
  • 142. The JavaScript Programming Language Douglas Crockford [email_address] produce.yahoo.com/crock/javascript.ppt