SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
JavaScript 1.8.5
New Features Explored
by Milan Adamovsky
http://milan.adamovsky.com ◆ http://www.hardcorejs.com
Friday, October 4, 13
What it is
• Culmination of good-to-haves
• Most features can be shimmed
• Supported by all mobile devices
• Supported by most modern browsers
• IE8 is still in heavy use (JavaScript 1.5)
Friday, October 4, 13
Remember
• Includes many features introduced since 1.5
• 1.6
• 1.7 features mainly supported in FireFox
• Use reference material for all versions
• Some features are deprecated
Friday, October 4, 13
What to know
• Array functions
• Object properties
• Still doesn’t have block scope
• Function features
• “use strict”
Friday, October 4, 13
Quick notes
• NaN, Infinity, and undefined immutable
• No trailing commas in JSON.parse()
• Supports “strict mode”
• apply() accepts array-like object
• Data properties are big
Friday, October 4, 13
Strings
Friday, October 4, 13
“”.trim()
• Introduced in 1.8.5
• Removes leading spaces
• Removes trailing spaces
• Works on strings
Friday, October 4, 13
Example
" Hello World ! ".trim();
"Hello World !"
Friday, October 4, 13
Arrays
Friday, October 4, 13
[].map(fn, this)
• Introduced in 1.6
• Does not mutate array
• Works only on indexes with values
• Executes fn on each item in array
• Modify an array’s items without a loop
Friday, October 4, 13
Example
function resolve(item)
{
return $(item);
}
var selectors = ["body", "#hello"].map(resolve);
console.log(selectors);
[ e.fn.init[1], e.fn.init[0] ]
Friday, October 4, 13
[].reduce(fn, first)
• Introduced in 1.8
• Does not mutate array
• Executes fn on each item of array
• Reduce array to one value without loops
• Also available .reduceRight()
Friday, October 4, 13
Example
function callback(previousItem, currentItem, index, array)
{
console.log(previousItem, " - ", currentItem, " - ", index, " - ", array);
return previousItem + " " + currentItem;
}
var sentence = ["three", "little", "pigs", "red", "riding", "hood"].reduce(callback);
three - little - 1 - ["three", "little", "pigs", "red", "riding", "hood"]
three little - pigs - 2 - ["three", "little", "pigs", "red", "riding", "hood"]
three little pigs - red - 3 - ["three", "little", "pigs", "red", "riding", "hood"]
three little pigs red - riding - 4 - ["three", "little", "pigs", "red", "riding", "hood"]
three little pigs red riding - hood - 5 - ["three", "little", "pigs", "red", "riding", "hood"]
Friday, October 4, 13
Array.isArray(obj)
• Introduced in 1.8.5
• Determine if object is truly an array
• Fastest performance
• Prototype is an array
• Arguments are not an array
Friday, October 4, 13
Example
function callback(switcher)
{
return switcher
? ["m", "t", "w", "t", "f"]
: undefined;
}
Array.isArray([]);
Array.isArray(new Array());
Array.isArray(callback(true));
Array.isArray(callback(false));
true
true
true
false
Friday, October 4, 13
[].filter(fn, this)
• Introduced in 1.6
• Filters an array via fn
• Returns all items for which fn returns true
• Doesn’t need loops
• Takes optional parameter for this
Friday, October 4, 13
Example
function callback(value, index, array)
{
return value.days === 31;
}
[
{ days : 31, month : "January" },
{ days : 28, month : "February" },
{ days : 31, month : "March" },
{ days : 30, month : "April" },
{ days : 31, month : "May" }
].filter(callback);
[ Object, Object, Object ]
Friday, October 4, 13
See also
• [].forEach(fn, this)
• [].toString()
• [].some(fn, this)
• [].every(fn, this)
• [].lastIndexOf(search, index)
Friday, October 4, 13
Objects
Friday, October 4, 13
Property descriptors
• Meta data describing object
• Each property has descriptor
• Data descriptors
• Accessor descriptors
• Cannot mix both
Friday, October 4, 13
Data descriptor
• Introduced in 1.8.5
• Default descriptor type
• Define configuration of property values
• Optional key value (defaults to undefined)
• Optional key writeable (defaults to false)
Friday, October 4, 13
Example
var person = {};
Object.defineProperty(person,
"firstName",
{
configurable : true,
enumerable : true,
value : "Joe",
writable : true
});
console.log(person.firstName);
person.firstName = "Jane";
console.log(person.firstName);
Joe
Jane
Friday, October 4, 13
Example
var person = {};
Object.defineProperty(person,
"firstName",
{
configurable : true,
enumerable : true,
value : "Joe",
writable : false
});
console.log(person.firstName);
person.firstName = "Jane";
console.log(person.firstName);
Joe
Joe
Friday, October 4, 13
Default values
• Default values apply with defineProperty()
• Object literal assignment defaults to truely
• Defaults to falsely with defineProperty()
• All descriptors have writable attribute
• All descriptors have enumerable attribute
Friday, October 4, 13
Accessor descriptor
• Introduced in 1.8.5
• Bind functionality with property
• Define configuration of property values
• Optional key value (defaults to undefined)
• Optional key writeable (defaults to false)
Friday, October 4, 13
Example
var year = {};
(function ()
{
var month = "";
Object.defineProperty(year,
"month",
{
configurable : true,
enumerable : true,
get : function ()
{
return month;
},
set : function (value)
{
value = value.toLowerCase().substr(0, 3);
month = ([ "jan", "feb", "mar" ].filter(function (val, index, arr)
{
return value === val;
}))[0];
}
});
})();
year.month = "February";
console.log(year.month);
Friday, October 4, 13
Notice
• Value needs to live outside the setter
• Closure is needed to protect value
• Keyword let is non-standard
• Use a getter to retrieve value
• Logic can exist in both getter and setter
Friday, October 4, 13
Important
• Properties are basis for most new features
• defineProperty() defines one property
• defineProperties() defines many at once
Friday, October 4, 13
Read descriptors
• Use Object.getOwnPropertyDescriptor(o, prop)
• Returns a property descriptor object
• Object contains all descriptor attributes
• Returns undefined if invalid property
• Object is a normal object literal
Friday, October 4, 13
Example
var person = {};
Object.defineProperty(person,
"firstName",
{
configurable : false,
enumerable : true,
value : "Joe"
});
console.log(Object.getOwnPropertyDescriptor(person, "firstName"));
Object {value: "Joe", writable: false, enumerable: true, configurable: false}
Friday, October 4, 13
Object.keys(obj)
• Returns array of properties
• Only its own enumerable properties
• Also works on arrays
• Does not travel prototype chain
Friday, October 4, 13
Example
var person = {
"age" : 99,
"lastName" : "Shmo"
};
Object.defineProperty(person,
"firstName",
{
configurable : true,
enumerable : false,
value : "Joe",
writable : true
});
console.log(Object.keys(person));
["age", "lastName"]
Friday, October 4, 13
See also
• for...in to list all properties
• Object.getOwnPropertyNames(obj)
Friday, October 4, 13
Object.seal(obj)
• Partially locks down object
• Locks descriptors from being removed
• Locks object from new properties
• Properties can still be writable
• Prototype chain remains uneffected
Friday, October 4, 13
Example
var person = {
"age" : 99,
"lastName" : "Shmo"
};
Object.defineProperty(person,
"firstName",
{
configurable : true,
enumerable : false,
value : "Joe",
writable : true
});
console.log(Object.keys(person));
["age", "lastName"]
Friday, October 4, 13
.preventExtensions(obj)
• Prevents own properties from being added
• Properties can still be removed
• Does not lock down prototype
Friday, October 4, 13
Object.freeze(obj)
• Complete shallow lock-down of object
• Locks descriptors from being removed
• Locks object from new properties
• Locks properties from being modified
• A frozen object gives you most security
Friday, October 4, 13
Check state
• Use isSealed() to check for seal
• Use isExtensible() to check extensibility
• Use isFrozen() to check for freeze
• States can only change to be tighter
• Cannot unfreeze
Friday, October 4, 13
Functions
Friday, October 4, 13
function(){}.bind()
• Marry a context to function definition
• Similar to call() and apply()
• Does not execute function
• Can also marry arguments to function
• Called a bound function
Friday, October 4, 13
Example
function sample()
{
console.log(this);
}
var boundFunction;
sample();
boundFunction = sample.bind({ "first" : "Joe" } );
boundFunction();
sample();
(sample.bind({ "last" : "Shmo" } ))();
Window {top: Window, window: Window, location: Location, external: Object, chrome: Object…}
Object {first: "Joe"}
Window {top: Window, window: Window, location: Location, external: Object, chrome: Object…}
Object {last: "Shmo"}
Friday, October 4, 13
Connect
• Thank you for your time
• Connect with me on LinkedIn
• Join the Hardcore JavaScript community
• Read my blog
• Contact me via e-mail
Friday, October 4, 13

Weitere ähnliche Inhalte

Was ist angesagt?

Øredev 2011 - JVM JIT for Dummies (What the JVM Does With Your Bytecode When ...
Øredev 2011 - JVM JIT for Dummies (What the JVM Does With Your Bytecode When ...Øredev 2011 - JVM JIT for Dummies (What the JVM Does With Your Bytecode When ...
Øredev 2011 - JVM JIT for Dummies (What the JVM Does With Your Bytecode When ...Charles Nutter
 
Oscon Java Testing on the Fast Lane
Oscon Java Testing on the Fast LaneOscon Java Testing on the Fast Lane
Oscon Java Testing on the Fast LaneAndres Almiray
 
Monads asking the right question
Monads  asking the right questionMonads  asking the right question
Monads asking the right questionPawel Szulc
 
Painless Persistence with Realm
Painless Persistence with RealmPainless Persistence with Realm
Painless Persistence with RealmChristian Melchior
 
Swift와 Objective-C를 함께 쓰는 방법
Swift와 Objective-C를 함께 쓰는 방법Swift와 Objective-C를 함께 쓰는 방법
Swift와 Objective-C를 함께 쓰는 방법Jung Kim
 
Understanding Prototypal Inheritance
Understanding Prototypal InheritanceUnderstanding Prototypal Inheritance
Understanding Prototypal InheritanceGuy Royse
 
Sustainable TDD
Sustainable TDDSustainable TDD
Sustainable TDDSteven Mak
 
7 Sins of Java fixed in Kotlin
7 Sins of Java fixed in Kotlin7 Sins of Java fixed in Kotlin
7 Sins of Java fixed in KotlinLuca Guadagnini
 
Modernizes your objective C - Oliviero
Modernizes your objective C - OlivieroModernizes your objective C - Oliviero
Modernizes your objective C - OlivieroCodemotion
 
Gettingintotheloop 100123225021-phpapp01
Gettingintotheloop 100123225021-phpapp01Gettingintotheloop 100123225021-phpapp01
Gettingintotheloop 100123225021-phpapp01Ravi Kumar
 
JS Level Up: Prototypes
JS Level Up: PrototypesJS Level Up: Prototypes
JS Level Up: PrototypesVernon Kesner
 

Was ist angesagt? (20)

Øredev 2011 - JVM JIT for Dummies (What the JVM Does With Your Bytecode When ...
Øredev 2011 - JVM JIT for Dummies (What the JVM Does With Your Bytecode When ...Øredev 2011 - JVM JIT for Dummies (What the JVM Does With Your Bytecode When ...
Øredev 2011 - JVM JIT for Dummies (What the JVM Does With Your Bytecode When ...
 
Introduce Django
Introduce DjangoIntroduce Django
Introduce Django
 
Oscon Java Testing on the Fast Lane
Oscon Java Testing on the Fast LaneOscon Java Testing on the Fast Lane
Oscon Java Testing on the Fast Lane
 
Javascript the New Parts
Javascript the New PartsJavascript the New Parts
Javascript the New Parts
 
Objective-c memory
Objective-c memoryObjective-c memory
Objective-c memory
 
Gcrc talk
Gcrc talkGcrc talk
Gcrc talk
 
Monads asking the right question
Monads  asking the right questionMonads  asking the right question
Monads asking the right question
 
Go Java, Go!
Go Java, Go!Go Java, Go!
Go Java, Go!
 
Painless Persistence with Realm
Painless Persistence with RealmPainless Persistence with Realm
Painless Persistence with Realm
 
Dynamic Python
Dynamic PythonDynamic Python
Dynamic Python
 
Swift와 Objective-C를 함께 쓰는 방법
Swift와 Objective-C를 함께 쓰는 방법Swift와 Objective-C를 함께 쓰는 방법
Swift와 Objective-C를 함께 쓰는 방법
 
Understanding Prototypal Inheritance
Understanding Prototypal InheritanceUnderstanding Prototypal Inheritance
Understanding Prototypal Inheritance
 
iSoligorsk #3 2013
iSoligorsk #3 2013iSoligorsk #3 2013
iSoligorsk #3 2013
 
Sustainable TDD
Sustainable TDDSustainable TDD
Sustainable TDD
 
7 Sins of Java fixed in Kotlin
7 Sins of Java fixed in Kotlin7 Sins of Java fixed in Kotlin
7 Sins of Java fixed in Kotlin
 
Modernizes your objective C - Oliviero
Modernizes your objective C - OlivieroModernizes your objective C - Oliviero
Modernizes your objective C - Oliviero
 
Gettingintotheloop 100123225021-phpapp01
Gettingintotheloop 100123225021-phpapp01Gettingintotheloop 100123225021-phpapp01
Gettingintotheloop 100123225021-phpapp01
 
Meet Couch DB
Meet Couch DBMeet Couch DB
Meet Couch DB
 
JavaScript Primer
JavaScript PrimerJavaScript Primer
JavaScript Primer
 
JS Level Up: Prototypes
JS Level Up: PrototypesJS Level Up: Prototypes
JS Level Up: Prototypes
 

Ähnlich wie JavaScript 1.8.5: New Features Explored

Javascript the Interlingua of the Web
Javascript the Interlingua of the WebJavascript the Interlingua of the Web
Javascript the Interlingua of the Webandersjanmyr
 
Enterprise javascriptsession3
Enterprise javascriptsession3Enterprise javascriptsession3
Enterprise javascriptsession3Troy Miles
 
The Not Java That's Not Scala
The Not Java That's Not ScalaThe Not Java That's Not Scala
The Not Java That's Not ScalaJustin Lee
 
Javascript the Language of the Web
Javascript the Language of the WebJavascript the Language of the Web
Javascript the Language of the Webandersjanmyr
 
Intro to pattern matching in scala
Intro to pattern matching in scalaIntro to pattern matching in scala
Intro to pattern matching in scalaJan Krag
 
Everything is Permitted: Extending Built-ins
Everything is Permitted: Extending Built-insEverything is Permitted: Extending Built-ins
Everything is Permitted: Extending Built-insAndrew Dupont
 
Object Oriented Programming in JavaScript
Object Oriented Programming in JavaScriptObject Oriented Programming in JavaScript
Object Oriented Programming in JavaScriptzand3rs
 
Lessons from 4 years of driver develoment
Lessons from 4 years of driver develomentLessons from 4 years of driver develoment
Lessons from 4 years of driver develomentchristkv
 
Property based Testing - generative data & executable domain rules
Property based Testing - generative data & executable domain rulesProperty based Testing - generative data & executable domain rules
Property based Testing - generative data & executable domain rulesDebasish Ghosh
 
The Shape of Functional Programming
The Shape of Functional ProgrammingThe Shape of Functional Programming
The Shape of Functional ProgrammingMike Fogus
 
Awesomeness of JavaScript…almost
Awesomeness of JavaScript…almostAwesomeness of JavaScript…almost
Awesomeness of JavaScript…almostQuinton Sheppard
 
Basic Javascript
Basic JavascriptBasic Javascript
Basic JavascriptBunlong Van
 
Expressjs basic to advance, power by Node.js
Expressjs basic to advance, power by Node.jsExpressjs basic to advance, power by Node.js
Expressjs basic to advance, power by Node.jsCaesar Chi
 
Front end fundamentals session 1: javascript core
Front end fundamentals session 1: javascript coreFront end fundamentals session 1: javascript core
Front end fundamentals session 1: javascript coreWeb Zhao
 
JSConf: All You Can Leet
JSConf: All You Can LeetJSConf: All You Can Leet
JSConf: All You Can Leetjohndaviddalton
 
Spock: Test Well and Prosper
Spock: Test Well and ProsperSpock: Test Well and Prosper
Spock: Test Well and ProsperKen Kousen
 
Teach your kids how to program with Python and the Raspberry Pi
Teach your kids how to program with Python and the Raspberry PiTeach your kids how to program with Python and the Raspberry Pi
Teach your kids how to program with Python and the Raspberry PiJuan Gomez
 
Mastering ElasticSearch with Ruby and Tire
Mastering ElasticSearch with Ruby and TireMastering ElasticSearch with Ruby and Tire
Mastering ElasticSearch with Ruby and TireLuca Bonmassar
 

Ähnlich wie JavaScript 1.8.5: New Features Explored (20)

Javascript the Interlingua of the Web
Javascript the Interlingua of the WebJavascript the Interlingua of the Web
Javascript the Interlingua of the Web
 
Enterprise javascriptsession3
Enterprise javascriptsession3Enterprise javascriptsession3
Enterprise javascriptsession3
 
The Not Java That's Not Scala
The Not Java That's Not ScalaThe Not Java That's Not Scala
The Not Java That's Not Scala
 
Javascript the Language of the Web
Javascript the Language of the WebJavascript the Language of the Web
Javascript the Language of the Web
 
Intro to pattern matching in scala
Intro to pattern matching in scalaIntro to pattern matching in scala
Intro to pattern matching in scala
 
Everything is Permitted: Extending Built-ins
Everything is Permitted: Extending Built-insEverything is Permitted: Extending Built-ins
Everything is Permitted: Extending Built-ins
 
Object Oriented Programming in JavaScript
Object Oriented Programming in JavaScriptObject Oriented Programming in JavaScript
Object Oriented Programming in JavaScript
 
Lessons from 4 years of driver develoment
Lessons from 4 years of driver develomentLessons from 4 years of driver develoment
Lessons from 4 years of driver develoment
 
Property based Testing - generative data & executable domain rules
Property based Testing - generative data & executable domain rulesProperty based Testing - generative data & executable domain rules
Property based Testing - generative data & executable domain rules
 
The Shape of Functional Programming
The Shape of Functional ProgrammingThe Shape of Functional Programming
The Shape of Functional Programming
 
Scala 101-bcndevcon
Scala 101-bcndevconScala 101-bcndevcon
Scala 101-bcndevcon
 
Awesomeness of JavaScript…almost
Awesomeness of JavaScript…almostAwesomeness of JavaScript…almost
Awesomeness of JavaScript…almost
 
Basic Javascript
Basic JavascriptBasic Javascript
Basic Javascript
 
Expressjs basic to advance, power by Node.js
Expressjs basic to advance, power by Node.jsExpressjs basic to advance, power by Node.js
Expressjs basic to advance, power by Node.js
 
Front end fundamentals session 1: javascript core
Front end fundamentals session 1: javascript coreFront end fundamentals session 1: javascript core
Front end fundamentals session 1: javascript core
 
JSConf: All You Can Leet
JSConf: All You Can LeetJSConf: All You Can Leet
JSConf: All You Can Leet
 
Spock: Test Well and Prosper
Spock: Test Well and ProsperSpock: Test Well and Prosper
Spock: Test Well and Prosper
 
Gl qtp day 3 2
Gl qtp day 3   2Gl qtp day 3   2
Gl qtp day 3 2
 
Teach your kids how to program with Python and the Raspberry Pi
Teach your kids how to program with Python and the Raspberry PiTeach your kids how to program with Python and the Raspberry Pi
Teach your kids how to program with Python and the Raspberry Pi
 
Mastering ElasticSearch with Ruby and Tire
Mastering ElasticSearch with Ruby and TireMastering ElasticSearch with Ruby and Tire
Mastering ElasticSearch with Ruby and Tire
 

Kürzlich hochgeladen

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
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
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
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
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
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
 
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
 
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
 
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
 

Kürzlich hochgeladen (20)

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
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
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
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
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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
 
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...
 
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...
 
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
 

JavaScript 1.8.5: New Features Explored

  • 1. JavaScript 1.8.5 New Features Explored by Milan Adamovsky http://milan.adamovsky.com ◆ http://www.hardcorejs.com Friday, October 4, 13
  • 2. What it is • Culmination of good-to-haves • Most features can be shimmed • Supported by all mobile devices • Supported by most modern browsers • IE8 is still in heavy use (JavaScript 1.5) Friday, October 4, 13
  • 3. Remember • Includes many features introduced since 1.5 • 1.6 • 1.7 features mainly supported in FireFox • Use reference material for all versions • Some features are deprecated Friday, October 4, 13
  • 4. What to know • Array functions • Object properties • Still doesn’t have block scope • Function features • “use strict” Friday, October 4, 13
  • 5. Quick notes • NaN, Infinity, and undefined immutable • No trailing commas in JSON.parse() • Supports “strict mode” • apply() accepts array-like object • Data properties are big Friday, October 4, 13
  • 7. “”.trim() • Introduced in 1.8.5 • Removes leading spaces • Removes trailing spaces • Works on strings Friday, October 4, 13
  • 8. Example " Hello World ! ".trim(); "Hello World !" Friday, October 4, 13
  • 10. [].map(fn, this) • Introduced in 1.6 • Does not mutate array • Works only on indexes with values • Executes fn on each item in array • Modify an array’s items without a loop Friday, October 4, 13
  • 11. Example function resolve(item) { return $(item); } var selectors = ["body", "#hello"].map(resolve); console.log(selectors); [ e.fn.init[1], e.fn.init[0] ] Friday, October 4, 13
  • 12. [].reduce(fn, first) • Introduced in 1.8 • Does not mutate array • Executes fn on each item of array • Reduce array to one value without loops • Also available .reduceRight() Friday, October 4, 13
  • 13. Example function callback(previousItem, currentItem, index, array) { console.log(previousItem, " - ", currentItem, " - ", index, " - ", array); return previousItem + " " + currentItem; } var sentence = ["three", "little", "pigs", "red", "riding", "hood"].reduce(callback); three - little - 1 - ["three", "little", "pigs", "red", "riding", "hood"] three little - pigs - 2 - ["three", "little", "pigs", "red", "riding", "hood"] three little pigs - red - 3 - ["three", "little", "pigs", "red", "riding", "hood"] three little pigs red - riding - 4 - ["three", "little", "pigs", "red", "riding", "hood"] three little pigs red riding - hood - 5 - ["three", "little", "pigs", "red", "riding", "hood"] Friday, October 4, 13
  • 14. Array.isArray(obj) • Introduced in 1.8.5 • Determine if object is truly an array • Fastest performance • Prototype is an array • Arguments are not an array Friday, October 4, 13
  • 15. Example function callback(switcher) { return switcher ? ["m", "t", "w", "t", "f"] : undefined; } Array.isArray([]); Array.isArray(new Array()); Array.isArray(callback(true)); Array.isArray(callback(false)); true true true false Friday, October 4, 13
  • 16. [].filter(fn, this) • Introduced in 1.6 • Filters an array via fn • Returns all items for which fn returns true • Doesn’t need loops • Takes optional parameter for this Friday, October 4, 13
  • 17. Example function callback(value, index, array) { return value.days === 31; } [ { days : 31, month : "January" }, { days : 28, month : "February" }, { days : 31, month : "March" }, { days : 30, month : "April" }, { days : 31, month : "May" } ].filter(callback); [ Object, Object, Object ] Friday, October 4, 13
  • 18. See also • [].forEach(fn, this) • [].toString() • [].some(fn, this) • [].every(fn, this) • [].lastIndexOf(search, index) Friday, October 4, 13
  • 20. Property descriptors • Meta data describing object • Each property has descriptor • Data descriptors • Accessor descriptors • Cannot mix both Friday, October 4, 13
  • 21. Data descriptor • Introduced in 1.8.5 • Default descriptor type • Define configuration of property values • Optional key value (defaults to undefined) • Optional key writeable (defaults to false) Friday, October 4, 13
  • 22. Example var person = {}; Object.defineProperty(person, "firstName", { configurable : true, enumerable : true, value : "Joe", writable : true }); console.log(person.firstName); person.firstName = "Jane"; console.log(person.firstName); Joe Jane Friday, October 4, 13
  • 23. Example var person = {}; Object.defineProperty(person, "firstName", { configurable : true, enumerable : true, value : "Joe", writable : false }); console.log(person.firstName); person.firstName = "Jane"; console.log(person.firstName); Joe Joe Friday, October 4, 13
  • 24. Default values • Default values apply with defineProperty() • Object literal assignment defaults to truely • Defaults to falsely with defineProperty() • All descriptors have writable attribute • All descriptors have enumerable attribute Friday, October 4, 13
  • 25. Accessor descriptor • Introduced in 1.8.5 • Bind functionality with property • Define configuration of property values • Optional key value (defaults to undefined) • Optional key writeable (defaults to false) Friday, October 4, 13
  • 26. Example var year = {}; (function () { var month = ""; Object.defineProperty(year, "month", { configurable : true, enumerable : true, get : function () { return month; }, set : function (value) { value = value.toLowerCase().substr(0, 3); month = ([ "jan", "feb", "mar" ].filter(function (val, index, arr) { return value === val; }))[0]; } }); })(); year.month = "February"; console.log(year.month); Friday, October 4, 13
  • 27. Notice • Value needs to live outside the setter • Closure is needed to protect value • Keyword let is non-standard • Use a getter to retrieve value • Logic can exist in both getter and setter Friday, October 4, 13
  • 28. Important • Properties are basis for most new features • defineProperty() defines one property • defineProperties() defines many at once Friday, October 4, 13
  • 29. Read descriptors • Use Object.getOwnPropertyDescriptor(o, prop) • Returns a property descriptor object • Object contains all descriptor attributes • Returns undefined if invalid property • Object is a normal object literal Friday, October 4, 13
  • 30. Example var person = {}; Object.defineProperty(person, "firstName", { configurable : false, enumerable : true, value : "Joe" }); console.log(Object.getOwnPropertyDescriptor(person, "firstName")); Object {value: "Joe", writable: false, enumerable: true, configurable: false} Friday, October 4, 13
  • 31. Object.keys(obj) • Returns array of properties • Only its own enumerable properties • Also works on arrays • Does not travel prototype chain Friday, October 4, 13
  • 32. Example var person = { "age" : 99, "lastName" : "Shmo" }; Object.defineProperty(person, "firstName", { configurable : true, enumerable : false, value : "Joe", writable : true }); console.log(Object.keys(person)); ["age", "lastName"] Friday, October 4, 13
  • 33. See also • for...in to list all properties • Object.getOwnPropertyNames(obj) Friday, October 4, 13
  • 34. Object.seal(obj) • Partially locks down object • Locks descriptors from being removed • Locks object from new properties • Properties can still be writable • Prototype chain remains uneffected Friday, October 4, 13
  • 35. Example var person = { "age" : 99, "lastName" : "Shmo" }; Object.defineProperty(person, "firstName", { configurable : true, enumerable : false, value : "Joe", writable : true }); console.log(Object.keys(person)); ["age", "lastName"] Friday, October 4, 13
  • 36. .preventExtensions(obj) • Prevents own properties from being added • Properties can still be removed • Does not lock down prototype Friday, October 4, 13
  • 37. Object.freeze(obj) • Complete shallow lock-down of object • Locks descriptors from being removed • Locks object from new properties • Locks properties from being modified • A frozen object gives you most security Friday, October 4, 13
  • 38. Check state • Use isSealed() to check for seal • Use isExtensible() to check extensibility • Use isFrozen() to check for freeze • States can only change to be tighter • Cannot unfreeze Friday, October 4, 13
  • 40. function(){}.bind() • Marry a context to function definition • Similar to call() and apply() • Does not execute function • Can also marry arguments to function • Called a bound function Friday, October 4, 13
  • 41. Example function sample() { console.log(this); } var boundFunction; sample(); boundFunction = sample.bind({ "first" : "Joe" } ); boundFunction(); sample(); (sample.bind({ "last" : "Shmo" } ))(); Window {top: Window, window: Window, location: Location, external: Object, chrome: Object…} Object {first: "Joe"} Window {top: Window, window: Window, location: Location, external: Object, chrome: Object…} Object {last: "Shmo"} Friday, October 4, 13
  • 42. Connect • Thank you for your time • Connect with me on LinkedIn • Join the Hardcore JavaScript community • Read my blog • Contact me via e-mail Friday, October 4, 13