SlideShare una empresa de Scribd logo
1 de 54
Javascript para
Desenvolvedores C#
O que é Javascript?
HTML
CSSJavascript
Você está falando
de Java?
Brendan Eich
Lightscript
Linguagens
Fortemente
tipado
Estático
Herança por
classes
Classes
Construtores
Métodos
Linguagens
Vagamente
tipado
Dinâmico
Protótipos
Functions
Functions
Functions
Estático
Herança
Classes
Construtores
Métodos
Fortemente
tipado
Comparando Linguagens
Construindo avião no ar
www.youtube.com/watch?v=ZRUiJXrl8Yg
Sobre o curso
Javascript
Comparação
Parte 1:
Awesome
Functions
Parte 2:
Conceitos
Parte 3:
POO
Parte 4:
Sintaxe
{
//C#
var cliente = new Cliente();
}
{
//JavaScript
var cliente = new Cliente();
}
{
//C#
cliente = true;
}
{
//JavaScript
cliente = true;
}
Sintaxe
Fortemente tipado
• Tipos são conhecidos por estruturas estáticas previamente definidas
• O compilador deduz um tipo quando não definido explicitamente
• O compilador verifica a integridade da variável e impede a compilação
se necessário
// C#
var x = 0; //Assina como int
bool result = x is int; //true
x = new Pet(); // Erro de compilação
// Javascript
var x = 0; // cria a variavel x que guarda um numero
var result = typeof x == 'number'; // Funciona
x = new Pet(); //sem problemas, redefine x com o novo tipo
Sintaxe
Vagamente tipado
• Tipos são criados na hora
• Verificações de tipo ocorrem apenas na execução
• Todos os tipos são dinâmicos e podem ser alterados ao seu bem
entender
Sintaxe
Orientação a objetos
• Heranças e interfaces são partes da entidade
// C#
public class Animal {
public void Alimentar(){}
}
public interface IMovivel {
void Mover();
}
public class Coelho : Animal, IMovivel {
public void Mover(){}
}
public class Skate : IMovivel {
public void Mover(){}
}
// C#
public static class FazCoisas
{
static void Alimentar(Animal animal)
{
animal.Alimentar();
}
static void Mover(IMovivel coisa)
{
coisa.Mover();
}
}
Sintaxe
Orientação a objetos
• Heranças e interfaces são partes da entidade
Sintaxe
Orientação a objetos
• Tipagem é o menos importante, mas a forma como o objeto é
definido é importante
• “DuckTyping”, parece com um pato, fala como um pato, anda como
um pato, nada como um pato: não precisa ser um pato para funcionar
//Javascript
function Alimentar(animal) {
animal.Alimentar();
}
function Mover(objeto) {
objeto.Mover();
}
Sintaxe
Dinamismo Extremo
• É possível adicionar ou remover pedaços do código com total
naturalidade
//Criamos um objeto com propriedades definidas
var locadora = {
nome: "Top Video",
bairro: "Coral"
};
//Mesmo depois de definido, pode-se adicionar outra propriedade
locadora.usuarioNetFlix = "topvideo123";
//É possivel também adicionar funções em runtime
//tanto quanto arrancar trechos da estrutura
locadora.cancelarAssinatura = function() {
delete locadora.usuarioNetFlix;
};
Sintaxe
Palavras reservadas
Essas funcionalidades funcionam no Javascript de modo idêntico ao C#
• for
• Continue
• Break
• if/else
• while
• switch/case
• do/while
• try/catch/finally
• new
Caracteristicas
Escopo global
• No C# Classes são bem organizadas em namespaces
• Contém métodos bem definidos e um ponto de partida
//C#
namespace someNamespace
{
public class SomeClass
{
public void SomeMethod()
{
}
public static void Main()
{
}
}
}
//Javascript
var x = 1; //window.x
function increment() {//window.increment
var y = 1;
x = x + y;
}
increment();
console.log(y);//Não funciona
Caracteristicas
Escopo global
• No Javascript, todos os objetos criados estarão no escopo global
• Não existe ponto de partida, o navegador lê os arquivos e os
executa instantaneamente
Caracteristicas
Escopos locais
• Enquanto no C# estruturas de controle como while, for, if, e até
escopos sem cabeça podem isolar variáveis
• A única coisa em Javascript que isola variáveis são functions
//C#
while (true){
var x = 1;
}
for (; ;) {
var y = 2;
}
if (true){
var z = 3;
}
{
var w = 4;
}
//Não posso acessar nada daqui
//Javascript
while (true) {
var x = 1;
}
for (; ;) {
var y = 2;
}
if (true) {
var z = 3;
}
function fn() {
var w = 4;
}
//Posso acesar todos, menos w
Caracteristicas
Coalescência
• Todos os tipos do Javascript são flexíveis e adaptativos
• Isso quer dizer que qualquer coisa pode ser usada como
string, bool, numero..
var x = 16;
!x;
"test " + "me";
"test " + x;
"test " + true;
"test " + (x == "16");
"test " + (x === "16");
100 + !!x
// false
// test me
// test 16
// test true
// test true
// test false
// 101
Caracteristicas
Coalescência
• Igualdade com Javascript é idêntico ao C#, exceto por
(===, !==)
• Estes operadores verificam também o tipo para
validarem a condição
"hello" == "hello"
1 == 1;
1 == "1";
1 === "1"
true == 1
true == "1"
true === "1"
//true
//true
//true
//false
//true
//true
//false
Caracteristicas
Coalescência
• Há também outros operadores
• == (igual)
• === (idêntico)
• != (diferente)
• !== (distinto)
• > (maior)
• >= (maior ou igual)
• < (menor)
• <= (menor ou igual)
• && (e)
• || (ou)
• ! (negação)
• +,-,*,/,% (operadores matemáticos)
Tipos
Primitivos Boolean String Number
Especiais Null Undefined NaN
Referência Object Array
Delegates Function
var x = 10;
var tipo = typeof x;
//retorna "number"
Tipos
Primitivos
(typeof 1);
(typeof 1.0);
(typeof true);
(typeof false);
(typeof "Alguma string");
(typeof 'c');
(typeof 'false');
(typeof ("teste" + 32 + false));
//number
//number, não é feita distinção de int, float, double
//boolean
//boolean
//string
//string, não é feita distinção entre string e char
//string
//string 'teste32false'
Tipos
Numéricos
• É possível definir a precisão do numero do qual você está
trabalhando
var a = 1;
var b = 1.5;
var c = 080;
var d = 0xfff3c;
var e = 1.34e6;
var f = 10.0;
var g = f +0.4;
//inteiro
//ponto flutuante
//inteiro, calculado como octal (prefixo 0)
//inteiro, calculado como hexadecimal (prefixo 0x)
//Notação Científica (1340000)
//como o ponto flutuante é irrelevante, vai ser
//interpretado como um inteiro comum
//Aqui o inteiro se torna de fato um ponto flutuante
Tipos
Especiais
• Quando um calculo dá errado por serem de tipos não
numéricos, há o valor NaN (Not A Number)
var falha = 10 / "zero"; //NaN
NaN == NaN; //false, NaN é diferente dele mesmo
isNaN(NaN); //true
isNaN(falha); //true
isNaN(10); //false
isNaN("10"); //false, interpretou string como number
isNaN("0xf3d"); //false
1 === "1"
Tipos
Especiais
• Null
• É idêntico ao null do C# e representa uma referência
apontando para lugar nenhum
• Undefined
• Significa que a variável não existe no contexto determinado
var aluno = { nome: null };
typeof x.nome; //foi definido mas não aponta para nada, retorna 'null'
typeof x.telefone; //não foi definido, não existe, retorna 'undefined'
delete x.nome;
typeof x.nome; //Agora a variavel foi eliminada da memoria local, sendo undefined
Tipos
Boolean
• Qualquer tipo é considerado booleano de acordo com sua coalescência
if (true) { }
if (false) { }
if ("hello") { }
if ("") { }
if (25) { }
if (-4) { }
if (0) { }
if (10/0) { }
var x = null;
if (x) { }
if (!x) { }
if (!!x) { }
if (y) { }
//true
//false
//qualquer string não vazia retorna true
//false
//true
//qualquer numero diferente de 0 retorna true
//false
//false (NaN)
//objetos não-validos retornam false
//true
//false
//false (undefined)
Tipos
Boolean
• Também é possível fazer validações mais complexas
//C#
public void SomeMethod(Animal animal, string raca = null) {
if (animal != null) animal.Alimentar();
if (raca == null) animal.Raca = "Desconhecido";
else animal.Raca = raca;
animal.Raca = raca != null ? raca : "Desconhecido";
animal.Raca = raca ?? "Desconhecido";
}
//Javascript
function SomeFunction(animal, raca) {
if (animal) animal.Alimentar();
if (raca) animal.raca = raca;
else animal.raca = "Desconhecido";
animal.raca = raca ? raca : "Desconhecido";
animal.raca = raca || "Desconheido";
}
Tipos
String
• Um dos objetos mais dinâmicos no Javascript
var s = "string";
var t = 'string';
var c = "don't tell me";
c = 'ele disse: "chega ai" ';
var u = "One" + 'Two';
var single = u[3];
log(u.length); var t = ' Apenas um Teste ';
log(t.indexOf('um')); //8
log(t.replace('um', 1));//" Apenas 1 Teste “
log(t.split(' ')); //["", "Apenas", "um", "Teste", ""]
log(t.split('')); //[" ", "A", "p", "e", "n", ...]
log(t.split()); //[" Apenas um Teste "]
log(t.trim()); //"Apenas um Teste"
log(t.toLowerCase()); //" apenas um teste "
log(t.toUpperCase()); //" APENAS UM TESTE "
//Aspas duplas
//Aspas simples
//aspas simples são parte do conteúdo
//aspas duplas são parte do conteúdo
//Concatena sem problemas
//'T
// 6
Tipos
Objetos Literais
• Atalhos para criar estruturas:
var game = {
name: 'Sonic the Hedgehog 2',
'Numero bits': 08
};
var n = game.name;
var b = game['Numero bits'];
var game = {
name: 'Sonic the Hedgehog 2',
console: {
name: 'Megadrive',
'Numero bits':08
}
};
var b = game.console['Numero bits'];
var c = game['console'].name;
Tipos
Referências
• Funcionam semelhante ao C#:
//Javascript
var game = {
name: 'Sonic the Hedgehog 2',
videogame: {
name: 'Megadrive',
'Numero bits': 08
}
};
var gameName = game.name;
var newVideogame = game.videogame;
gameName = "Super Mario Bros";
newVideogame.name = "Super Nintendo";
console.log(game.name); //Sonic
console.log(gameName); //Mario
console.log(game.videogame.name); //Super
console.log(newVideogame.name); //Super
Game
Name Sonic
Videogame
Nome Megadrive
Numero de
Bits
08
Name Sonic
Videogame
Mario
Super
Nintendo
Tipos
Arrays
• Simples (mas poderosas) coleções em javascript
var arry = ['string', 2, undefined, true];
var games = [
{ nome: 'sonic', bits: 8 },
{ nome: 'mario', bits: 16 }
];
Tipos
Arrays
Obj0
Obj1
Obj2 Obj3
Push
Tipos
Arrays
Obj0
Obj1
Obj2 Obj3
Pop
Tipos
Arrays
Obj0
Obj1Obj2 Obj3
Unshift
Tipos
Arrays
Obj0
Obj1Obj2 Obj3
Shift
Tipos
Arrays
Obj0 Obj1Obj2 Obj3
Reverse
Tipos
Arrays
Obj0 Obj1Obj2 Obj3
IndexOf
Quiz
 Javascript é derivado do Java
 Verdadeiro
 Falso
 Javascript é orientado à objetos
 True
 False
Quiz
 Javascript é derivado do Java
 Verdadeiro
 Falso
 Javascript é orientado à objetos
 True
 False
Quiz
 Qual o resultado desta expressão?
console.log(true + true + true + true);
 true
 “truetruetruetrue”
 4
 Depois que eu já criei um objeto, posso continuar atribuindo propriedades nele
 Verdadeiro
 Falso
Quiz
 Qual o resultado desta expressão?
console.log(true + true + true + true);
 true
 “truetruetruetrue”
 4
 Depois que eu já criei um objeto, posso continuar atribuindo propriedades nele
 Verdadeiro
 Falso
Quiz
 O que a variável vai receber? var a = 0xFFO3C;
 Numero inteiro
 String
 Object
 Undefined
 Numero Hexadecimal
Quiz
 O que a variável vai receber? var a = 0xFFO3C;
 Numero inteiro
 String
 Object
 Undefined (letra O)
 Numero Hexadecimal
Quiz
Como vai ficar a variável depois do seguinte comando:
var a = [1, 2, 3, 4];
a.unshift(5);
a.pop();
A - [1,2,3,4]
B - [2,3,4,5]
C - [5,1,2,3]
D - [5,2,3,4]
Quiz
Como vai ficar a variável depois do seguinte comando:
var a = [1, 2, 3, 4];
a.unshift(5);
a.pop();
A - [1,2,3,4]
B - [2,3,4,5]
C - [5,1,2,3]
D - [5,2,3,4]
• Java !=== Javascript
• Você está livre!
• Não compila, apenas lê e executa
• Tipagem fraca
• Coalescente
• Apenas functions definem escopos
• Tipos primitivos e referência
semelhantes ao C#
Links
• Code Academy - Javascript
• Documentação oficial do Javascript
• Coderbyte Challenges
• Advanced Javascript
• Javascript.info
• Json.org
• You Dont Know Javascript
• Especificação do ECMAScript 5.1

Más contenido relacionado

La actualidad más candente

Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portugues
Laura
 

La actualidad más candente (20)

Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
 
JavaScript for Beginners
JavaScript for BeginnersJavaScript for Beginners
JavaScript for Beginners
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
 
Java
JavaJava
Java
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões Regulares
 
Debugging tips and tricks
Debugging tips and tricksDebugging tips and tricks
Debugging tips and tricks
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?
 
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsCurso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
 
SFD - C# para a comunidade
SFD - C# para a comunidadeSFD - C# para a comunidade
SFD - C# para a comunidade
 
Comandos e expressões
Comandos e expressõesComandos e expressões
Comandos e expressões
 
Lógica de Programação com Javascript - Aula #03
Lógica de Programação com Javascript - Aula #03Lógica de Programação com Javascript - Aula #03
Lógica de Programação com Javascript - Aula #03
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portugues
 
DOJO - TDD com C++
DOJO - TDD com C++DOJO - TDD com C++
DOJO - TDD com C++
 
TDD em C++
TDD em C++TDD em C++
TDD em C++
 

Similar a Javascript para CSharpers 1 - Comparando

Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptx
LuanDev1
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - Conceitos
Wesley Lemos
 
Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - Functions
Wesley Lemos
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
Carlos Santos
 
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
Carlos Santos
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
Wesley Lemos
 

Similar a Javascript para CSharpers 1 - Comparando (20)

Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptx
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 
Java script1
Java script1Java script1
Java script1
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - Conceitos
 
Java - Aula 08
Java - Aula 08Java - Aula 08
Java - Aula 08
 
Javascript The good, bad and ugly parts
Javascript The good, bad and ugly partsJavascript The good, bad and ugly parts
Javascript The good, bad and ugly parts
 
Javascript
JavascriptJavascript
Javascript
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Fundamentos de C#
Fundamentos de C#Fundamentos de C#
Fundamentos de C#
 
JavaScript das Ruas
JavaScript das RuasJavaScript das Ruas
JavaScript das Ruas
 
Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - Functions
 
JAVA - Introdução
JAVA - IntroduçãoJAVA - Introdução
JAVA - Introdução
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
 
Javascript - boas práticas
Javascript - boas práticasJavascript - boas práticas
Javascript - boas práticas
 
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 

Más de Wesley Lemos

Learn with portals!
Learn with portals!Learn with portals!
Learn with portals!
Wesley Lemos
 

Más de Wesley Lemos (11)

Javascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryJavascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQuery
 
Javascript para CSharpers - Append A - DOM
Javascript para CSharpers - Append A - DOM Javascript para CSharpers - Append A - DOM
Javascript para CSharpers - Append A - DOM
 
Dicas sobre amamentar
Dicas sobre amamentarDicas sobre amamentar
Dicas sobre amamentar
 
Apresentação VideoSis
Apresentação VideoSisApresentação VideoSis
Apresentação VideoSis
 
Lição ebd
Lição ebdLição ebd
Lição ebd
 
Learn with portals!
Learn with portals!Learn with portals!
Learn with portals!
 
Go project
Go projectGo project
Go project
 
Criatividade
CriatividadeCriatividade
Criatividade
 
Asus a7 v400 mx se
Asus a7 v400 mx seAsus a7 v400 mx se
Asus a7 v400 mx se
 
Como fazer uma apresentação de sucesso
Como fazer uma apresentação de sucessoComo fazer uma apresentação de sucesso
Como fazer uma apresentação de sucesso
 
Hotelaria
HotelariaHotelaria
Hotelaria
 

Javascript para CSharpers 1 - Comparando

  • 2.
  • 3. O que é Javascript? HTML CSSJavascript Você está falando de Java? Brendan Eich Lightscript
  • 4.
  • 6.
  • 8. Comparando Linguagens Construindo avião no ar www.youtube.com/watch?v=ZRUiJXrl8Yg
  • 9. Sobre o curso Javascript Comparação Parte 1: Awesome Functions Parte 2: Conceitos Parte 3: POO Parte 4:
  • 10.
  • 11. Sintaxe { //C# var cliente = new Cliente(); } { //JavaScript var cliente = new Cliente(); } { //C# cliente = true; } { //JavaScript cliente = true; }
  • 12. Sintaxe Fortemente tipado • Tipos são conhecidos por estruturas estáticas previamente definidas • O compilador deduz um tipo quando não definido explicitamente • O compilador verifica a integridade da variável e impede a compilação se necessário // C# var x = 0; //Assina como int bool result = x is int; //true x = new Pet(); // Erro de compilação
  • 13. // Javascript var x = 0; // cria a variavel x que guarda um numero var result = typeof x == 'number'; // Funciona x = new Pet(); //sem problemas, redefine x com o novo tipo Sintaxe Vagamente tipado • Tipos são criados na hora • Verificações de tipo ocorrem apenas na execução • Todos os tipos são dinâmicos e podem ser alterados ao seu bem entender
  • 14. Sintaxe Orientação a objetos • Heranças e interfaces são partes da entidade // C# public class Animal { public void Alimentar(){} } public interface IMovivel { void Mover(); } public class Coelho : Animal, IMovivel { public void Mover(){} } public class Skate : IMovivel { public void Mover(){} }
  • 15. // C# public static class FazCoisas { static void Alimentar(Animal animal) { animal.Alimentar(); } static void Mover(IMovivel coisa) { coisa.Mover(); } } Sintaxe Orientação a objetos • Heranças e interfaces são partes da entidade
  • 16. Sintaxe Orientação a objetos • Tipagem é o menos importante, mas a forma como o objeto é definido é importante • “DuckTyping”, parece com um pato, fala como um pato, anda como um pato, nada como um pato: não precisa ser um pato para funcionar //Javascript function Alimentar(animal) { animal.Alimentar(); } function Mover(objeto) { objeto.Mover(); }
  • 17. Sintaxe Dinamismo Extremo • É possível adicionar ou remover pedaços do código com total naturalidade //Criamos um objeto com propriedades definidas var locadora = { nome: "Top Video", bairro: "Coral" }; //Mesmo depois de definido, pode-se adicionar outra propriedade locadora.usuarioNetFlix = "topvideo123"; //É possivel também adicionar funções em runtime //tanto quanto arrancar trechos da estrutura locadora.cancelarAssinatura = function() { delete locadora.usuarioNetFlix; };
  • 18. Sintaxe Palavras reservadas Essas funcionalidades funcionam no Javascript de modo idêntico ao C# • for • Continue • Break • if/else • while • switch/case • do/while • try/catch/finally • new
  • 19.
  • 20. Caracteristicas Escopo global • No C# Classes são bem organizadas em namespaces • Contém métodos bem definidos e um ponto de partida //C# namespace someNamespace { public class SomeClass { public void SomeMethod() { } public static void Main() { } } }
  • 21. //Javascript var x = 1; //window.x function increment() {//window.increment var y = 1; x = x + y; } increment(); console.log(y);//Não funciona Caracteristicas Escopo global • No Javascript, todos os objetos criados estarão no escopo global • Não existe ponto de partida, o navegador lê os arquivos e os executa instantaneamente
  • 22. Caracteristicas Escopos locais • Enquanto no C# estruturas de controle como while, for, if, e até escopos sem cabeça podem isolar variáveis • A única coisa em Javascript que isola variáveis são functions //C# while (true){ var x = 1; } for (; ;) { var y = 2; } if (true){ var z = 3; } { var w = 4; } //Não posso acessar nada daqui //Javascript while (true) { var x = 1; } for (; ;) { var y = 2; } if (true) { var z = 3; } function fn() { var w = 4; } //Posso acesar todos, menos w
  • 23. Caracteristicas Coalescência • Todos os tipos do Javascript são flexíveis e adaptativos • Isso quer dizer que qualquer coisa pode ser usada como string, bool, numero.. var x = 16; !x; "test " + "me"; "test " + x; "test " + true; "test " + (x == "16"); "test " + (x === "16"); 100 + !!x // false // test me // test 16 // test true // test true // test false // 101
  • 24. Caracteristicas Coalescência • Igualdade com Javascript é idêntico ao C#, exceto por (===, !==) • Estes operadores verificam também o tipo para validarem a condição "hello" == "hello" 1 == 1; 1 == "1"; 1 === "1" true == 1 true == "1" true === "1" //true //true //true //false //true //true //false
  • 25. Caracteristicas Coalescência • Há também outros operadores • == (igual) • === (idêntico) • != (diferente) • !== (distinto) • > (maior) • >= (maior ou igual) • < (menor) • <= (menor ou igual) • && (e) • || (ou) • ! (negação) • +,-,*,/,% (operadores matemáticos)
  • 26.
  • 27. Tipos Primitivos Boolean String Number Especiais Null Undefined NaN Referência Object Array Delegates Function var x = 10; var tipo = typeof x; //retorna "number"
  • 28. Tipos Primitivos (typeof 1); (typeof 1.0); (typeof true); (typeof false); (typeof "Alguma string"); (typeof 'c'); (typeof 'false'); (typeof ("teste" + 32 + false)); //number //number, não é feita distinção de int, float, double //boolean //boolean //string //string, não é feita distinção entre string e char //string //string 'teste32false'
  • 29. Tipos Numéricos • É possível definir a precisão do numero do qual você está trabalhando var a = 1; var b = 1.5; var c = 080; var d = 0xfff3c; var e = 1.34e6; var f = 10.0; var g = f +0.4; //inteiro //ponto flutuante //inteiro, calculado como octal (prefixo 0) //inteiro, calculado como hexadecimal (prefixo 0x) //Notação Científica (1340000) //como o ponto flutuante é irrelevante, vai ser //interpretado como um inteiro comum //Aqui o inteiro se torna de fato um ponto flutuante
  • 30. Tipos Especiais • Quando um calculo dá errado por serem de tipos não numéricos, há o valor NaN (Not A Number) var falha = 10 / "zero"; //NaN NaN == NaN; //false, NaN é diferente dele mesmo isNaN(NaN); //true isNaN(falha); //true isNaN(10); //false isNaN("10"); //false, interpretou string como number isNaN("0xf3d"); //false 1 === "1"
  • 31. Tipos Especiais • Null • É idêntico ao null do C# e representa uma referência apontando para lugar nenhum • Undefined • Significa que a variável não existe no contexto determinado var aluno = { nome: null }; typeof x.nome; //foi definido mas não aponta para nada, retorna 'null' typeof x.telefone; //não foi definido, não existe, retorna 'undefined' delete x.nome; typeof x.nome; //Agora a variavel foi eliminada da memoria local, sendo undefined
  • 32. Tipos Boolean • Qualquer tipo é considerado booleano de acordo com sua coalescência if (true) { } if (false) { } if ("hello") { } if ("") { } if (25) { } if (-4) { } if (0) { } if (10/0) { } var x = null; if (x) { } if (!x) { } if (!!x) { } if (y) { } //true //false //qualquer string não vazia retorna true //false //true //qualquer numero diferente de 0 retorna true //false //false (NaN) //objetos não-validos retornam false //true //false //false (undefined)
  • 33. Tipos Boolean • Também é possível fazer validações mais complexas //C# public void SomeMethod(Animal animal, string raca = null) { if (animal != null) animal.Alimentar(); if (raca == null) animal.Raca = "Desconhecido"; else animal.Raca = raca; animal.Raca = raca != null ? raca : "Desconhecido"; animal.Raca = raca ?? "Desconhecido"; } //Javascript function SomeFunction(animal, raca) { if (animal) animal.Alimentar(); if (raca) animal.raca = raca; else animal.raca = "Desconhecido"; animal.raca = raca ? raca : "Desconhecido"; animal.raca = raca || "Desconheido"; }
  • 34. Tipos String • Um dos objetos mais dinâmicos no Javascript var s = "string"; var t = 'string'; var c = "don't tell me"; c = 'ele disse: "chega ai" '; var u = "One" + 'Two'; var single = u[3]; log(u.length); var t = ' Apenas um Teste '; log(t.indexOf('um')); //8 log(t.replace('um', 1));//" Apenas 1 Teste “ log(t.split(' ')); //["", "Apenas", "um", "Teste", ""] log(t.split('')); //[" ", "A", "p", "e", "n", ...] log(t.split()); //[" Apenas um Teste "] log(t.trim()); //"Apenas um Teste" log(t.toLowerCase()); //" apenas um teste " log(t.toUpperCase()); //" APENAS UM TESTE " //Aspas duplas //Aspas simples //aspas simples são parte do conteúdo //aspas duplas são parte do conteúdo //Concatena sem problemas //'T // 6
  • 35. Tipos Objetos Literais • Atalhos para criar estruturas: var game = { name: 'Sonic the Hedgehog 2', 'Numero bits': 08 }; var n = game.name; var b = game['Numero bits']; var game = { name: 'Sonic the Hedgehog 2', console: { name: 'Megadrive', 'Numero bits':08 } }; var b = game.console['Numero bits']; var c = game['console'].name;
  • 36. Tipos Referências • Funcionam semelhante ao C#: //Javascript var game = { name: 'Sonic the Hedgehog 2', videogame: { name: 'Megadrive', 'Numero bits': 08 } }; var gameName = game.name; var newVideogame = game.videogame; gameName = "Super Mario Bros"; newVideogame.name = "Super Nintendo"; console.log(game.name); //Sonic console.log(gameName); //Mario console.log(game.videogame.name); //Super console.log(newVideogame.name); //Super Game Name Sonic Videogame Nome Megadrive Numero de Bits 08 Name Sonic Videogame Mario Super Nintendo
  • 37. Tipos Arrays • Simples (mas poderosas) coleções em javascript var arry = ['string', 2, undefined, true]; var games = [ { nome: 'sonic', bits: 8 }, { nome: 'mario', bits: 16 } ];
  • 44.
  • 45. Quiz  Javascript é derivado do Java  Verdadeiro  Falso  Javascript é orientado à objetos  True  False
  • 46. Quiz  Javascript é derivado do Java  Verdadeiro  Falso  Javascript é orientado à objetos  True  False
  • 47. Quiz  Qual o resultado desta expressão? console.log(true + true + true + true);  true  “truetruetruetrue”  4  Depois que eu já criei um objeto, posso continuar atribuindo propriedades nele  Verdadeiro  Falso
  • 48. Quiz  Qual o resultado desta expressão? console.log(true + true + true + true);  true  “truetruetruetrue”  4  Depois que eu já criei um objeto, posso continuar atribuindo propriedades nele  Verdadeiro  Falso
  • 49. Quiz  O que a variável vai receber? var a = 0xFFO3C;  Numero inteiro  String  Object  Undefined  Numero Hexadecimal
  • 50. Quiz  O que a variável vai receber? var a = 0xFFO3C;  Numero inteiro  String  Object  Undefined (letra O)  Numero Hexadecimal
  • 51. Quiz Como vai ficar a variável depois do seguinte comando: var a = [1, 2, 3, 4]; a.unshift(5); a.pop(); A - [1,2,3,4] B - [2,3,4,5] C - [5,1,2,3] D - [5,2,3,4]
  • 52. Quiz Como vai ficar a variável depois do seguinte comando: var a = [1, 2, 3, 4]; a.unshift(5); a.pop(); A - [1,2,3,4] B - [2,3,4,5] C - [5,1,2,3] D - [5,2,3,4]
  • 53. • Java !=== Javascript • Você está livre! • Não compila, apenas lê e executa • Tipagem fraca • Coalescente • Apenas functions definem escopos • Tipos primitivos e referência semelhantes ao C#
  • 54. Links • Code Academy - Javascript • Documentação oficial do Javascript • Coderbyte Challenges • Advanced Javascript • Javascript.info • Json.org • You Dont Know Javascript • Especificação do ECMAScript 5.1

Notas del editor

  1. Javascript é responsável pela parte atraz do HTML,