SlideShare a Scribd company logo
Fundamentos
JavaScript
Disclaimer
Cualquier similitud con la serie de charlas “Crockford on
JavaScript” es completamente intencional
http://www.yuiblog.com/crockford/
Disclaimer
Agenda
● El lenguaje más incomprendido del mundo
● Un poco de historia
● Características principales
● Literales
● Objects
● Exceptions
● Scope
● Functions
● Prototype
El lenguaje más incomprendido
del mundo
“I’ve made every mistake that can be made with JavaScript. The
worst one; I didn’t bother to learn the language first”
- Douglas Crockford
Las librerías y frameworks son abstracciones.
Demasiado buenas?
Buenas abstracciones.
Tech Talks - Fundamentos JavaScript
Tech Talks - Fundamentos JavaScript
Un mínimo de historia
● Netscape - LiveScript
● Sun - Java
● Microsoft - JScript
● European Computer Manufacturers Association - ECMAScript
JavaScript !==
Java
http://exploringdata.github.io/info/programming-languages-influence-network/
Características principales
● Loose typing
● Funciones como “first class objects”
● Lenguaje basado en prototipos
● Variables globales
Literales
var scarface = {
title: "Scarface",
plot: "Tony Montana manages to leave Cuba during ...",
quotes: [
"Every dog has his day",
"Say hello to my little friend!"
],
releaseDate: new Date(1986, 12, 9)
};
Objects
notification.message; //"Welcome Tony"
notification["message"]; //"Welcome Tony"
notification.type; //undefined
notification.type = "info";
notification.type; //"info"
delete notification.type;
notification.type; //undefined
Object.keys(notification); //["message"]
var notification = { message: "Welcome " + user.name };
movieService.rateMovie(scarface, user, 9,
"Excelent movie!", [aFriend, anotherFriend]);
movieService.rateMovie(scarface, user, 9,
null, [aFriend, anotherFriend]);
movieService.rateMovie({
movie: scarface,
user: user,
rating: 9,
recommendTo: [aFriend, anotherFriend]
});
Exceptions
function coolFunction() {
throw new Error("Not so cool error");
}try {
coolFunction(); //throws Error
} catch (e) {
console.log(e.name); //"Error"
console.log(e.message); //"Not so cool error"
}
function MyError(message) {
this.name = "MyError";
this.message = message || "Default Message";
}MyError.prototype = new Error();MyError.prototype.construct
MyError;try {
throw new MyError();
} catch (e) {
console.log(e.name); // "MyError"
console.log(e.message); // "Default Message"
}
try {
throw {
name: "MyError",
message: "Default Message"
};
} catch (e) {
console.log(e.name); // "MyError"
console.log(e.message); // "Default Message"
}
Scope
function rateFavMovies() {
for (var i = 0; i < favouriteMovies.length; i++) {
var movie = favouriteMovies[i];
movie.rating = 10;
}
...
}
function rateFavMovies() {
var movie;
for (var i = 0; i < favouriteMovies.length; i++) {
movie = favouriteMovies[i];
movie.rating = 10;
}
...
}
function showMovies(query, element) {
movieService.getMovies(query, function (movies) {
renderMovies(movies, element);
});
}
function bookmarker(bookmarks) {
return function (movies) {
for (var i = 0; i < movies.length; i++) {
bookmarks.push(movies[i]);
}
};
};var addToMyBookmarks = bookmarker(myBookmarks);
addToMyBookmarks(someMovies);
function createNotification() {
var status = "Pending";
return {
setStatus: function (newStatus) {
status = newStatus;
},
getStatus: function () {
return status;
}
};
}
var notification = createNotification();
notification.setStatus("Read");
notification.getStatus(); // "Read"
Functions
● Las funciones son first class objects
● Function.prototype
● Unidades básicas de ejecición
function greet() {
console.log("Hi!, I'm " + this.name);
}
greet(); // "Hi!, I'm undefined"
function greet() {
console.log("Hi!, I'm " + this.name);
}
var tony = {
name: "Tony Montana",
greet: greet
};
tony.greet(); // "Hi! I'm Tony Montana
greet(); // "Hi!, I'm undefined"
function greet(formal) {
console.log("Hi!, I'm " +
(formal ? "Mr. " : "") + this.name);
}
var tony = {
name: "Tony Montana",
};
tony.greet(); // TypeError
greet.apply(tony); // "Hi! I'm Tony Montana"
greet.apply(tony, [true]); // "Hi! I'm Mr. Tony Montana"
function Greeter(name) {
this.name = name;
}Greeter.prototype.greet = function () {
console.log("Hi! I'm " + this.name);
};
var tonyGreeter = new Greeter("Tony Montana");
tonyGreeter.greet(); // "Hi! I'm Tony Montana"
Prototype
message
status
alertUser
var proto = {
alertUser: function () { ... }
};
var notif = Object.create(proto);
notif.message = "Fatal error ...";
notif.status = "Pending";
notif.alertUser();
var theGodfather = {
title: "The Godfather",
director: "Francis Ford Coppola",
cast: ["Marlon Brando", "Al Pacino", "Diane Keaton"]
};
var theGodfather2 = Object.create(theGodfather);
theGodfather2.cast = ["Al Pacino", "Robert De Niro",
"Diane Keaton"];
theGodfather2.title += " Part II";
theGodfather.director; //"Francis Ford Coppola"
theGodfather2.director; //"Francis Ford Coppola"
theGodfather.title; //"The Godfather"
theGodfather2.title; //"The Godfather Part II"
theGodfather.cast; //["M. Brando", "Al Pacino", "D. Keaton"]
theGodfather2.cast;//["Al Pacino", "R. De Niro", "D. Keaton"
theGodfather.director = "Coppola";
theGodfatehr.director; //"Coppola"
theGodfather2.director; //"Coppola"
function Greeter(name) {
this.name = name;
}Greeter.prototype.greet = function () {
console.log("Hi! I'm " + this.name);
};
var tonyGreeter = new Greeter("Tony Montana");
tonyGreeter.greet(); // "Hi! I'm Tony Montana"
var greeterProto = {
greet: function () {
console.log("Hi! I'm " + this.name);
}
};
var tonyGreeter = Object.create(greeterProto);
tonyGreeter.name = "Tony Montana";
tonyGreeter.greet(); // "Hi! I'm Tony Montana"
Conclusiones
● JavaScript es un lenguaje distinto a los demás
● Hay muchos más secretos por descubrir
● El modelo basado en prototipos ofrece una alternativa
interesante al modelo basado en clases
● Gran expresividad
Fin

More Related Content

PDF
Error handling in JavaScript
PPTX
Swift 0x12 optional chaining
PDF
Crystal Rocks
PDF
Metamoose
ODP
Rust言語紹介
DOC
Kumpulan script jahil
PDF
Managing your Minions with Func
PDF
Low latency Logging (BrightonPHP - 18th Nov 2013)
Error handling in JavaScript
Swift 0x12 optional chaining
Crystal Rocks
Metamoose
Rust言語紹介
Kumpulan script jahil
Managing your Minions with Func
Low latency Logging (BrightonPHP - 18th Nov 2013)

What's hot (7)

PDF
How To Think In Go
PDF
Rust Mozlando Tutorial
PDF
Clojure and Modularity
PDF
7 Sins of Java fixed in Kotlin
ODP
Clojure made really really simple
PDF
Coroutines in Kotlin. UA Mobile 2017.
How To Think In Go
Rust Mozlando Tutorial
Clojure and Modularity
7 Sins of Java fixed in Kotlin
Clojure made really really simple
Coroutines in Kotlin. UA Mobile 2017.
Ad

Similar to Tech Talks - Fundamentos JavaScript (20)

PPT
Javascript quiz. Questions to ask when recruiting developers.
PDF
Meetup di GDG Italia - Leonardo Pirro - Codemotion Rome 2018
PDF
JavaScript Survival Guide
PDF
JavaScript - Like a Box of Chocolates - jsDay
PDF
Why Every Tester Should Learn Ruby
PDF
Python-GTK
PPT
JavaScript Basics
KEY
JavaScript Neednt Hurt - JavaBin talk
PDF
Geeks Anonymes - Le langage Go
DOCX
Game unleashedjavascript
PDF
Learning go for perl programmers
PPTX
Java script for web developer
KEY
jRuby: The best of both worlds
PDF
JavaScript - Like a Box of Chocolates
PPTX
Common mistakes in android development
PDF
Androidの本当にあった怖い話
PPTX
Ian 20150116 java script oop
PDF
What's up with Prototype and script.aculo.us?
PDF
Building android apps with kotlin
PPTX
Lightning talk: Go
Javascript quiz. Questions to ask when recruiting developers.
Meetup di GDG Italia - Leonardo Pirro - Codemotion Rome 2018
JavaScript Survival Guide
JavaScript - Like a Box of Chocolates - jsDay
Why Every Tester Should Learn Ruby
Python-GTK
JavaScript Basics
JavaScript Neednt Hurt - JavaBin talk
Geeks Anonymes - Le langage Go
Game unleashedjavascript
Learning go for perl programmers
Java script for web developer
jRuby: The best of both worlds
JavaScript - Like a Box of Chocolates
Common mistakes in android development
Androidの本当にあった怖い話
Ian 20150116 java script oop
What's up with Prototype and script.aculo.us?
Building android apps with kotlin
Lightning talk: Go
Ad

Recently uploaded (20)

PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Spectroscopy.pptx food analysis technology
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPT
Teaching material agriculture food technology
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Approach and Philosophy of On baking technology
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Machine learning based COVID-19 study performance prediction
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Spectroscopy.pptx food analysis technology
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
The Rise and Fall of 3GPP – Time for a Sabbatical?
gpt5_lecture_notes_comprehensive_20250812015547.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Network Security Unit 5.pdf for BCA BBA.
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Encapsulation_ Review paper, used for researhc scholars
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Programs and apps: productivity, graphics, security and other tools
Reach Out and Touch Someone: Haptics and Empathic Computing
Per capita expenditure prediction using model stacking based on satellite ima...
Teaching material agriculture food technology
Digital-Transformation-Roadmap-for-Companies.pptx
Approach and Philosophy of On baking technology
NewMind AI Weekly Chronicles - August'25-Week II
Unlocking AI with Model Context Protocol (MCP)
Machine learning based COVID-19 study performance prediction

Tech Talks - Fundamentos JavaScript

  • 2. Disclaimer Cualquier similitud con la serie de charlas “Crockford on JavaScript” es completamente intencional http://www.yuiblog.com/crockford/
  • 4. Agenda ● El lenguaje más incomprendido del mundo ● Un poco de historia ● Características principales ● Literales ● Objects ● Exceptions ● Scope ● Functions ● Prototype
  • 5. El lenguaje más incomprendido del mundo
  • 6. “I’ve made every mistake that can be made with JavaScript. The worst one; I didn’t bother to learn the language first” - Douglas Crockford
  • 7. Las librerías y frameworks son abstracciones. Demasiado buenas? Buenas abstracciones.
  • 10. Un mínimo de historia ● Netscape - LiveScript ● Sun - Java ● Microsoft - JScript ● European Computer Manufacturers Association - ECMAScript
  • 14. ● Loose typing ● Funciones como “first class objects” ● Lenguaje basado en prototipos ● Variables globales
  • 16. var scarface = { title: "Scarface", plot: "Tony Montana manages to leave Cuba during ...", quotes: [ "Every dog has his day", "Say hello to my little friend!" ], releaseDate: new Date(1986, 12, 9) };
  • 18. notification.message; //"Welcome Tony" notification["message"]; //"Welcome Tony" notification.type; //undefined notification.type = "info"; notification.type; //"info" delete notification.type; notification.type; //undefined Object.keys(notification); //["message"] var notification = { message: "Welcome " + user.name };
  • 19. movieService.rateMovie(scarface, user, 9, "Excelent movie!", [aFriend, anotherFriend]); movieService.rateMovie(scarface, user, 9, null, [aFriend, anotherFriend]); movieService.rateMovie({ movie: scarface, user: user, rating: 9, recommendTo: [aFriend, anotherFriend] });
  • 21. function coolFunction() { throw new Error("Not so cool error"); }try { coolFunction(); //throws Error } catch (e) { console.log(e.name); //"Error" console.log(e.message); //"Not so cool error" }
  • 22. function MyError(message) { this.name = "MyError"; this.message = message || "Default Message"; }MyError.prototype = new Error();MyError.prototype.construct MyError;try { throw new MyError(); } catch (e) { console.log(e.name); // "MyError" console.log(e.message); // "Default Message" }
  • 23. try { throw { name: "MyError", message: "Default Message" }; } catch (e) { console.log(e.name); // "MyError" console.log(e.message); // "Default Message" }
  • 24. Scope
  • 25. function rateFavMovies() { for (var i = 0; i < favouriteMovies.length; i++) { var movie = favouriteMovies[i]; movie.rating = 10; } ... }
  • 26. function rateFavMovies() { var movie; for (var i = 0; i < favouriteMovies.length; i++) { movie = favouriteMovies[i]; movie.rating = 10; } ... }
  • 27. function showMovies(query, element) { movieService.getMovies(query, function (movies) { renderMovies(movies, element); }); }
  • 28. function bookmarker(bookmarks) { return function (movies) { for (var i = 0; i < movies.length; i++) { bookmarks.push(movies[i]); } }; };var addToMyBookmarks = bookmarker(myBookmarks); addToMyBookmarks(someMovies);
  • 29. function createNotification() { var status = "Pending"; return { setStatus: function (newStatus) { status = newStatus; }, getStatus: function () { return status; } }; } var notification = createNotification(); notification.setStatus("Read"); notification.getStatus(); // "Read"
  • 31. ● Las funciones son first class objects ● Function.prototype ● Unidades básicas de ejecición
  • 32. function greet() { console.log("Hi!, I'm " + this.name); } greet(); // "Hi!, I'm undefined"
  • 33. function greet() { console.log("Hi!, I'm " + this.name); } var tony = { name: "Tony Montana", greet: greet }; tony.greet(); // "Hi! I'm Tony Montana greet(); // "Hi!, I'm undefined"
  • 34. function greet(formal) { console.log("Hi!, I'm " + (formal ? "Mr. " : "") + this.name); } var tony = { name: "Tony Montana", }; tony.greet(); // TypeError greet.apply(tony); // "Hi! I'm Tony Montana" greet.apply(tony, [true]); // "Hi! I'm Mr. Tony Montana"
  • 35. function Greeter(name) { this.name = name; }Greeter.prototype.greet = function () { console.log("Hi! I'm " + this.name); }; var tonyGreeter = new Greeter("Tony Montana"); tonyGreeter.greet(); // "Hi! I'm Tony Montana"
  • 37. message status alertUser var proto = { alertUser: function () { ... } }; var notif = Object.create(proto); notif.message = "Fatal error ..."; notif.status = "Pending"; notif.alertUser();
  • 38. var theGodfather = { title: "The Godfather", director: "Francis Ford Coppola", cast: ["Marlon Brando", "Al Pacino", "Diane Keaton"] }; var theGodfather2 = Object.create(theGodfather);
  • 39. theGodfather2.cast = ["Al Pacino", "Robert De Niro", "Diane Keaton"]; theGodfather2.title += " Part II"; theGodfather.director; //"Francis Ford Coppola" theGodfather2.director; //"Francis Ford Coppola" theGodfather.title; //"The Godfather" theGodfather2.title; //"The Godfather Part II" theGodfather.cast; //["M. Brando", "Al Pacino", "D. Keaton"] theGodfather2.cast;//["Al Pacino", "R. De Niro", "D. Keaton"
  • 40. theGodfather.director = "Coppola"; theGodfatehr.director; //"Coppola" theGodfather2.director; //"Coppola"
  • 41. function Greeter(name) { this.name = name; }Greeter.prototype.greet = function () { console.log("Hi! I'm " + this.name); }; var tonyGreeter = new Greeter("Tony Montana"); tonyGreeter.greet(); // "Hi! I'm Tony Montana"
  • 42. var greeterProto = { greet: function () { console.log("Hi! I'm " + this.name); } }; var tonyGreeter = Object.create(greeterProto); tonyGreeter.name = "Tony Montana"; tonyGreeter.greet(); // "Hi! I'm Tony Montana"
  • 44. ● JavaScript es un lenguaje distinto a los demás ● Hay muchos más secretos por descubrir ● El modelo basado en prototipos ofrece una alternativa interesante al modelo basado en clases ● Gran expresividad
  • 45. Fin