SlideShare ist ein Scribd-Unternehmen logo
1 von 32
JavaScript para desarrolladores C#
Luis Ruiz Pavón
Back-End Developer
http://geeks.ms/blogs/lruiz
@luisruizpavon
DISCLAIMER
No soy un ninja!!!
¿Cuál es el
problema con
JavaScript?
¿Por qué
debemos
aprender
Javacript?
Comparando los lenguajes
C#
Tipado fuerte
Estático
Herencia clásica
Clases
Constructores
Métodos
JavaScript
Tipado débil
Dinámico
Herencia por prototipos
Funciones
Funciones
Funciones
Demo
Comparación de lenguajes
Duck Typing
Duck typing
public class Persona
{
public string Name { get; set; }
}
public class Educado
{
public void Saluda(Persona persona)
{
Console.WriteLine("Hola {0}", persona.Name);
}
}
Duck typing
var Persona = function (name) {
this.name = name;
}
function educado(arg1) {
console.log('Hola ' + arg1.name);
}
var p = new Persona("Luis");
educado(p);
educado({ name: "Juan" });
JavaScript
Tipos
• Tipos por valor
• boolean
• string
• number
• Tipos por referencia
• object
• Delegados
• function
• Especiales
• null
• undefined
http://jsfiddle.net/luisruizpavon/3NkD3
Ámbito global
Toda variable no asignada a un objeto se asigna por defecto a window.
http://jsfiddle.net/luisruizpavon/y7Wpa/
var myVar = 1;
function myFunction() {
alert(myVar);
alert(window.myVar);
}
myFunction();
Variable hoisting
Los { } no crean ámbito como en C# (Sólo las funciones)
public MainPage()
{
if (true)
{
var title = "Main";
}
this.InitializeComponent();
}
La variable declarada dentro de una función sube hasta el principio de la función.
http://jsfiddle.net/luisruizpavon/BXv7F/
this
C#
• La palabra clave this hace referencia a la instancia actual de la clase.
JS
• Hace referencia al propietario de la función que la está invocando y se
puede modificar haciendo uso de call/apply
http://jsfiddle.net/luisruizpavon/q2GeU/
this - Patrón de invocación por método
Una función es almacenada como propiedad de un objeto
convirtiéndose así en lo que denominamos un método.
var myObj = {
name: 'Luis',
lastName: 'Ruiz',
fullName: function () {
return this.name + ' ' + this.lastName;
}
};
alert(myObj.fullName());
Truthy y Falsy
• Valores que siempre dan false:
• false
• 0
• ""
• null
• undefined
• NaN
Todos los demás valores son siempre true, incluyendo “0”, “false”,
funciones vacías, arrays vacíos y objetos vacíos.
Los operadores ==/!=
Estos 2 operadores no funcionan igual que en C#. Determinan la
igualdad con type coalescing (Intenta convertir el valor cast)
alert("ola ke ase" == "ola ke ase");
alert(1 == 1);
alert(1 == "1");
Usar siempre === y !=== (.Equals() de C#)
http://jsfiddle.net/luisruizpavon/RXaU3/
Funciones I
Pueden parecernos que son como los métodos en C#, pero no es así:
http://jsfiddle.net/luisruizpavon/smGvY/
function myFunction(arg1, arg2, arg3) {
alert(arg1);
alert(arg2);
alert(arg3);
}
myFunction(1);
Funciones II
• ¿Sobrecarga de funciones?
http://jsfiddle.net/luisruizpavon/rQ6mf/
function myFunction(arg1) {
alert("Uno");
}
function myFunction(arg1, arg2) {
alert("Dos");
}
function myFunction(arg1, arg2, arg3) {
alert("Tres");
}
myFunction(1);
Funciones III
• El objeto “arguments”
• Sólo está disponible en el cuerpo de la función
http://jsfiddle.net/luisruizpavon/MjDVm/
function myFunction(arg1) {
alert(arguments.length);
}
myFunction(1);
Funciones IV
• Todas las funciones retornan un valor
• Sino está definido, retorna ‘undefined’
• return; También retorna ‘undefined’
http://jsfiddle.net/luisruizpavon/VmeSf/
function myFunction() {
return;
}
var my = myFunction(1);
alert(typeof my);
Funciones V
• Las funciones son objetos. Tienen propiedades y funciones.
• Podemos pasar como parámetros de una función otras funciones.
http://jsfiddle.net/luisruizpavon/MwsbC/
function myFunction(arg1) {
alert(arg1);
}
alert(myFunction.length);
alert(myFunction.toString());
Patrón módulo
• Nos ayuda a mantener el contexto global lo más limpio y seguro
posible.
• Bootstraper
• Un ejemplo de uso son los plugins de jQuery.
http://jsfiddle.net/luisruizpavon/Mjkpc/
Frameworks
• Require.js – Cargador de módulos JavaScript (ServiceLocator)
• Underscore.js – Utilidades (Métodos extensores)
• jQuery
• TypeScript
• linq.js - LINQ for JavaScript
• Backbone - MVC
• Knockout - MVVM
• AngularJS – Google
• Handlebars.js
• …
http://jsfiddle.net/luisruizpavon/Qd96w/
Herramientas
• Developer Tools
• Firebug
• Chrome Developer Tools
• JSHint - http://jshint.com
• jsfiddle - http://jsfiddle.net
• Visual Studio
• WebStorm - Jetbrains
http://jsfiddle.net/luisruizpavon/Mjkpc/
Demo
Beezy
Q&A
Luis Ruiz Pavón
Back-End Developer
http://geeks.ms/blogs/lruiz
@luisruizpavon
GRACIAS POR SU ATENCIÓN
JavaScript para desarrolladores c#

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (9)

Clase 1 windows
Clase 1 windowsClase 1 windows
Clase 1 windows
 
Fotoooos
FotoooosFotoooos
Fotoooos
 
#Dean document db + express + angularjs + nodejs running on azure
#Dean document db + express + angularjs + nodejs running on azure#Dean document db + express + angularjs + nodejs running on azure
#Dean document db + express + angularjs + nodejs running on azure
 
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integraciónASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
 
HTML5 Web Workers
HTML5 Web WorkersHTML5 Web Workers
HTML5 Web Workers
 
HTML5 Media Queries
HTML5 Media QueriesHTML5 Media Queries
HTML5 Media Queries
 
HTML5 Offline
HTML5 OfflineHTML5 Offline
HTML5 Offline
 
Dispositivos de salida(2)
Dispositivos de salida(2)Dispositivos de salida(2)
Dispositivos de salida(2)
 
ASP.NET Core 1.0
ASP.NET Core 1.0ASP.NET Core 1.0
ASP.NET Core 1.0
 

Ähnlich wie JavaScript para desarrolladores c#

Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript David Ballén
 
Programación Políglota en la JVM
Programación Políglota en la JVMProgramación Políglota en la JVM
Programación Políglota en la JVMJano González
 
JavaScript para Programadores Java
JavaScript para Programadores JavaJavaScript para Programadores Java
JavaScript para Programadores JavaCarlos A. Iglesias
 
Curso Swift
Curso SwiftCurso Swift
Curso SwiftPlatzi
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)Oliver Centeno
 
Elementos del Hardware y Software
Elementos del Hardware y SoftwareElementos del Hardware y Software
Elementos del Hardware y Softwarecarlosadrianev
 
¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticasjaespinmora
 
Codemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilCodemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilJavier Abadía
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swiftbetabeers
 
Proyectos Web 3 Introduccion Php
Proyectos Web   3 Introduccion PhpProyectos Web   3 Introduccion Php
Proyectos Web 3 Introduccion PhpJose Ponce
 
Programar java
Programar javaProgramar java
Programar javavloor
 
Introducción Javascript.pdf
Introducción Javascript.pdfIntroducción Javascript.pdf
Introducción Javascript.pdfrhapetus
 
Programar java
Programar javaProgramar java
Programar javavloor
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMjavier ramirez
 

Ähnlich wie JavaScript para desarrolladores c# (20)

Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
 
Programación Políglota en la JVM
Programación Políglota en la JVMProgramación Políglota en la JVM
Programación Políglota en la JVM
 
JavaScript para Programadores Java
JavaScript para Programadores JavaJavaScript para Programadores Java
JavaScript para Programadores Java
 
Curso Swift
Curso SwiftCurso Swift
Curso Swift
 
Tema2[php]
Tema2[php]Tema2[php]
Tema2[php]
 
Php
PhpPhp
Php
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)
 
Elementos del Hardware y Software
Elementos del Hardware y SoftwareElementos del Hardware y Software
Elementos del Hardware y Software
 
¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas
 
Presentación 09 Cajas blanca
Presentación 09 Cajas blancaPresentación 09 Cajas blanca
Presentación 09 Cajas blanca
 
Codemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilCodemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícil
 
32773 php-basico
32773 php-basico32773 php-basico
32773 php-basico
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swift
 
Proyectos Web 3 Introduccion Php
Proyectos Web   3 Introduccion PhpProyectos Web   3 Introduccion Php
Proyectos Web 3 Introduccion Php
 
Programar java
Programar javaProgramar java
Programar java
 
Ruby intro
Ruby introRuby intro
Ruby intro
 
Introducción Javascript.pdf
Introducción Javascript.pdfIntroducción Javascript.pdf
Introducción Javascript.pdf
 
Programar java
Programar javaProgramar java
Programar java
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 

Mehr von Luis Ruiz Pavón

OAuth2 para desarrolladores
OAuth2 para desarrolladoresOAuth2 para desarrolladores
OAuth2 para desarrolladoresLuis Ruiz Pavón
 
Patrones de diseño de software en la creación de microservicios
Patrones de diseño de software en la creación de microserviciosPatrones de diseño de software en la creación de microservicios
Patrones de diseño de software en la creación de microserviciosLuis Ruiz Pavón
 
Servicios comunes en .NET Core
Servicios comunes en .NET CoreServicios comunes en .NET Core
Servicios comunes en .NET CoreLuis Ruiz Pavón
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0Luis Ruiz Pavón
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7Luis Ruiz Pavón
 
Como hago yo asp.net mvc dot netspainconference 2015
Como hago yo asp.net mvc   dot netspainconference 2015Como hago yo asp.net mvc   dot netspainconference 2015
Como hago yo asp.net mvc dot netspainconference 2015Luis Ruiz Pavón
 
Foro arquitectos de Microsoft 2015 - CQRS/ES Cambiando tu forma de pensar
Foro arquitectos de Microsoft 2015 - CQRS/ES Cambiando tu forma de pensarForo arquitectos de Microsoft 2015 - CQRS/ES Cambiando tu forma de pensar
Foro arquitectos de Microsoft 2015 - CQRS/ES Cambiando tu forma de pensarLuis Ruiz Pavón
 
La calidad de código importa
La calidad de código importaLa calidad de código importa
La calidad de código importaLuis Ruiz Pavón
 
Gwab diseño de arquitecturas escalables con cqrs
Gwab   diseño de arquitecturas escalables con cqrsGwab   diseño de arquitecturas escalables con cqrs
Gwab diseño de arquitecturas escalables con cqrsLuis Ruiz Pavón
 

Mehr von Luis Ruiz Pavón (9)

OAuth2 para desarrolladores
OAuth2 para desarrolladoresOAuth2 para desarrolladores
OAuth2 para desarrolladores
 
Patrones de diseño de software en la creación de microservicios
Patrones de diseño de software en la creación de microserviciosPatrones de diseño de software en la creación de microservicios
Patrones de diseño de software en la creación de microservicios
 
Servicios comunes en .NET Core
Servicios comunes en .NET CoreServicios comunes en .NET Core
Servicios comunes en .NET Core
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
Como hago yo asp.net mvc dot netspainconference 2015
Como hago yo asp.net mvc   dot netspainconference 2015Como hago yo asp.net mvc   dot netspainconference 2015
Como hago yo asp.net mvc dot netspainconference 2015
 
Foro arquitectos de Microsoft 2015 - CQRS/ES Cambiando tu forma de pensar
Foro arquitectos de Microsoft 2015 - CQRS/ES Cambiando tu forma de pensarForo arquitectos de Microsoft 2015 - CQRS/ES Cambiando tu forma de pensar
Foro arquitectos de Microsoft 2015 - CQRS/ES Cambiando tu forma de pensar
 
La calidad de código importa
La calidad de código importaLa calidad de código importa
La calidad de código importa
 
Gwab diseño de arquitecturas escalables con cqrs
Gwab   diseño de arquitecturas escalables con cqrsGwab   diseño de arquitecturas escalables con cqrs
Gwab diseño de arquitecturas escalables con cqrs
 

Kürzlich hochgeladen

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 

Kürzlich hochgeladen (12)

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 

JavaScript para desarrolladores c#

  • 2. Luis Ruiz Pavón Back-End Developer http://geeks.ms/blogs/lruiz @luisruizpavon
  • 4. ¿Cuál es el problema con JavaScript?
  • 6.
  • 7.
  • 8. Comparando los lenguajes C# Tipado fuerte Estático Herencia clásica Clases Constructores Métodos JavaScript Tipado débil Dinámico Herencia por prototipos Funciones Funciones Funciones
  • 11. Duck typing public class Persona { public string Name { get; set; } } public class Educado { public void Saluda(Persona persona) { Console.WriteLine("Hola {0}", persona.Name); } }
  • 12. Duck typing var Persona = function (name) { this.name = name; } function educado(arg1) { console.log('Hola ' + arg1.name); } var p = new Persona("Luis"); educado(p); educado({ name: "Juan" });
  • 14. Tipos • Tipos por valor • boolean • string • number • Tipos por referencia • object • Delegados • function • Especiales • null • undefined http://jsfiddle.net/luisruizpavon/3NkD3
  • 15. Ámbito global Toda variable no asignada a un objeto se asigna por defecto a window. http://jsfiddle.net/luisruizpavon/y7Wpa/ var myVar = 1; function myFunction() { alert(myVar); alert(window.myVar); } myFunction();
  • 16. Variable hoisting Los { } no crean ámbito como en C# (Sólo las funciones) public MainPage() { if (true) { var title = "Main"; } this.InitializeComponent(); } La variable declarada dentro de una función sube hasta el principio de la función. http://jsfiddle.net/luisruizpavon/BXv7F/
  • 17. this C# • La palabra clave this hace referencia a la instancia actual de la clase. JS • Hace referencia al propietario de la función que la está invocando y se puede modificar haciendo uso de call/apply http://jsfiddle.net/luisruizpavon/q2GeU/
  • 18. this - Patrón de invocación por método Una función es almacenada como propiedad de un objeto convirtiéndose así en lo que denominamos un método. var myObj = { name: 'Luis', lastName: 'Ruiz', fullName: function () { return this.name + ' ' + this.lastName; } }; alert(myObj.fullName());
  • 19. Truthy y Falsy • Valores que siempre dan false: • false • 0 • "" • null • undefined • NaN Todos los demás valores son siempre true, incluyendo “0”, “false”, funciones vacías, arrays vacíos y objetos vacíos.
  • 20. Los operadores ==/!= Estos 2 operadores no funcionan igual que en C#. Determinan la igualdad con type coalescing (Intenta convertir el valor cast) alert("ola ke ase" == "ola ke ase"); alert(1 == 1); alert(1 == "1"); Usar siempre === y !=== (.Equals() de C#) http://jsfiddle.net/luisruizpavon/RXaU3/
  • 21. Funciones I Pueden parecernos que son como los métodos en C#, pero no es así: http://jsfiddle.net/luisruizpavon/smGvY/ function myFunction(arg1, arg2, arg3) { alert(arg1); alert(arg2); alert(arg3); } myFunction(1);
  • 22. Funciones II • ¿Sobrecarga de funciones? http://jsfiddle.net/luisruizpavon/rQ6mf/ function myFunction(arg1) { alert("Uno"); } function myFunction(arg1, arg2) { alert("Dos"); } function myFunction(arg1, arg2, arg3) { alert("Tres"); } myFunction(1);
  • 23. Funciones III • El objeto “arguments” • Sólo está disponible en el cuerpo de la función http://jsfiddle.net/luisruizpavon/MjDVm/ function myFunction(arg1) { alert(arguments.length); } myFunction(1);
  • 24. Funciones IV • Todas las funciones retornan un valor • Sino está definido, retorna ‘undefined’ • return; También retorna ‘undefined’ http://jsfiddle.net/luisruizpavon/VmeSf/ function myFunction() { return; } var my = myFunction(1); alert(typeof my);
  • 25. Funciones V • Las funciones son objetos. Tienen propiedades y funciones. • Podemos pasar como parámetros de una función otras funciones. http://jsfiddle.net/luisruizpavon/MwsbC/ function myFunction(arg1) { alert(arg1); } alert(myFunction.length); alert(myFunction.toString());
  • 26. Patrón módulo • Nos ayuda a mantener el contexto global lo más limpio y seguro posible. • Bootstraper • Un ejemplo de uso son los plugins de jQuery. http://jsfiddle.net/luisruizpavon/Mjkpc/
  • 27. Frameworks • Require.js – Cargador de módulos JavaScript (ServiceLocator) • Underscore.js – Utilidades (Métodos extensores) • jQuery • TypeScript • linq.js - LINQ for JavaScript • Backbone - MVC • Knockout - MVVM • AngularJS – Google • Handlebars.js • … http://jsfiddle.net/luisruizpavon/Qd96w/
  • 28. Herramientas • Developer Tools • Firebug • Chrome Developer Tools • JSHint - http://jshint.com • jsfiddle - http://jsfiddle.net • Visual Studio • WebStorm - Jetbrains http://jsfiddle.net/luisruizpavon/Mjkpc/
  • 30. Q&A
  • 31. Luis Ruiz Pavón Back-End Developer http://geeks.ms/blogs/lruiz @luisruizpavon GRACIAS POR SU ATENCIÓN

Hinweis der Redaktion

  1. El Duck Typing, en los lenguajes de programación, es una técnica para determinar si un objeto es una instacia de una determinada clase basándose únicamente en los métodos que implementa.
  2. typeof operator Null & undefined example
  3. Recomendación: No contaminar window
  4. Recomendación: Hacer hoisting explicito
  5. Recomendación con ejemplo: Simplificar los condicionales, Incializar valores por defecto (Namespaces)
  6. Podemos almacenarla en una variable y luego invocarla (Delegado anónimo)