SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
Javascript
The good, bad and ugly parts
Fabian Carlos
Meoapp
Prospecta-me
Uma linguagem
confusa e subestimada
Você pode fazer uma aplicação
web, mobile e desktop em Javascript.
Particularidades
● Não tem classes apenas objetos
● Notação literal de objetos
● boolean, number e string
● null e undefined
Partes ruins
● Programação baseadas em variáveis globais
● + para adição e concatenação
● Escopo estranho
● == e !=
Descobrindo os tipos
typeof "Douglas Crockford" // "string"
typeof 1999 // "number"
typeof {} // "object"
typeof [1,2,3,4,5] // "object" ???
typeof null // "object" ???
typeof NaN // "object" ???
É igual?
'' == '0' // false
0 == '0' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == 0 // true
false == undefined // false
false == null // false
null == undefined // true
" trn " == 0 // true
Agora sim é igual!
'' === '0' // false
0 === '0' // false
0 === '0' // false
false === 'false' // false
false === '0' // false
false === 0 // false
false === undefined // false
false === null // false
null === undefined // false
" trn " === 0 // false
Números
0.1 + 0.2 === 0.3 // false ???
0.1 + 0.2 == 0.3 // false ???
// 0.1 + 0.2 -> 0.30000000000000004
Números
● Number 64-bit floating point
● Semelhante a Double em Java
Hoisting
● As variáveis dentro de uma função, irão agir como se tivessem sido
declaradas no topo da função.
meu_var = "global";
function func(){
console.log(meu_var); // undefined, o mesmo que var my_name = undefined;
var meu_var = "local";
console.log(meu_var); // local
}
func();
Parecia uma boa ideia, só que não
● Omitir ponto e virgula
● Blocos sem chaves
● false, null, undefined, NaN e Infinity
Onde usar ponto e virgula
// Não precisa de ponto e virgula
if (...) {...} else {...}
for (...) {...}
while (...) {...}
// Precisa de ponto e virgula
var x = 1;
var fun = function() {...};
var obj = {};
Blocos sem chaves
if (true)
console.log("OK");
else
console.log("OK TOO");
Blocos com chaves
if (true){
console.log("OK");
}else{
console.log("OK TOO");
}
Onde colocar a chave
if (true) {
console.log("OK");
}
if (true)
{
console.log("OK");
}
Onde colocar a chave
function cosmos(){
return
{
name: "Carl sagan"
}
}
Onde colocar a chave
function cosmos(){
return undefined;
{
name: "Carl sagan"
}
}
Onde colocar a chave
function cosmos(){
return {
name: "Carl sagan"
}
}
Partes boas
● Tipificação fraca.
● Objetos dinâmicos.
● Declaração de objetos literais.
Tipificação fraca
var nome = "Nicolas Tesla";
var idade = 43;
var peso = 75.7;
var cientista = true;
console.log(nome); // "Nicolas Tesla"
console.log(idade); // 43
console.log(peso); // 75.7
console.log(cientista); // true
Objetos dinâmicos
var data = {
'one': 1,
'two': 2,
'three': 3
};
data["four"] = 4;
console.log(data.four); // 4
console.log(data["four"]); // 4
Objetos literais
var pessoa_literal = {
init: function (nome) {
this.nome = nome;
}
};
var pessoa_literal = pessoa_literal;
pessoa_literal.nome = "Neil Tyson'"
var pessoa_literal_2 = pessoa_literal;
pessoa_literal_2.nome = "Carl Sagan";
console.log(pessoa_literal.nome); // "Carl Sagan"
console.log(pessoa_literal_2.nome); // "Carl Sagan"
Objetos construtores
function PessoaConstrutor(nome) {
this.nome = nome;
}
var pessoa_construtor = new PessoaConstrutor('Neil Tyson');
var outra_construtor = new PessoaConstrutor('Carl Sagan');
console.log(pessoa_construtor.nome); // "Neil Tyson"
console.log(outra_construtor.nome); // "Carl Sagan'"
Novas boas partes em ES6
● let
● Arrow Functions ou Fat Arrows.
● Default Arguments.
● Template Strings.
Let
● Não existe o comportamento de hoisting.
let cientista = true;
if (cientista) {
let nome = 'Neil Tyson';
console.log(nome); // 'Neil Tyson'
}
Arrow Functions
// Convencional
var soma = function(x, y) {
return x + y;
};
// ES6
var soma = (x, y) => x + y;
soma(5, 5); // 10
Default arguments
// CoffeeScript
cientista = (nome = "Carl Sagan") ->
console.log(nome)
// ES6
var cientista = function(nome = "Carl Sagan") {
console.log(nome);
}
Template Strings
var old_cosmos = "Carl Sagan"
var new_cosmos = "Neil deGrasse Tyson"
` Cosmos, é uma série americana de documentário científico. É uma continuação da série
de 1980, que foi apresentada por ${old_cosmos}. O apresentador da nova série é o físico
${new_cosmos}.
`
The best is yet to come

Mais conteúdo relacionado

Mais procurados

Java script para adultos
Java script para adultosJava script para adultos
Java script para adultosDiego Honorio
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
Iniciando com javaScript 2017
Iniciando com javaScript 2017Iniciando com javaScript 2017
Iniciando com javaScript 2017Romualdo Andre
 
Conexão Java 2012 - Orientação a Objetos das Galáxias
Conexão Java 2012 - Orientação a Objetos das GaláxiasConexão Java 2012 - Orientação a Objetos das Galáxias
Conexão Java 2012 - Orientação a Objetos das GaláxiasMaurício Aniche
 
Agile Vale 2011 - A Semente Não Entendida de Todas as Metodologias
Agile Vale 2011 - A Semente Não Entendida de Todas as MetodologiasAgile Vale 2011 - A Semente Não Entendida de Todas as Metodologias
Agile Vale 2011 - A Semente Não Entendida de Todas as MetodologiasFabio Akita
 
Javascript Avançado
Javascript AvançadoJavascript Avançado
Javascript AvançadoBruno Tavares
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails introNuno Silva
 

Mais procurados (17)

Java script para adultos
Java script para adultosJava script para adultos
Java script para adultos
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Introdução ao Swift
Introdução ao SwiftIntrodução ao Swift
Introdução ao Swift
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Iniciando com javaScript 2017
Iniciando com javaScript 2017Iniciando com javaScript 2017
Iniciando com javaScript 2017
 
Conexão Java 2012 - Orientação a Objetos das Galáxias
Conexão Java 2012 - Orientação a Objetos das GaláxiasConexão Java 2012 - Orientação a Objetos das Galáxias
Conexão Java 2012 - Orientação a Objetos das Galáxias
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Listas em C
Listas em CListas em C
Listas em C
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Agile Vale 2011 - A Semente Não Entendida de Todas as Metodologias
Agile Vale 2011 - A Semente Não Entendida de Todas as MetodologiasAgile Vale 2011 - A Semente Não Entendida de Todas as Metodologias
Agile Vale 2011 - A Semente Não Entendida de Todas as Metodologias
 
Javascript Avançado
Javascript AvançadoJavascript Avançado
Javascript Avançado
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails intro
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 

Semelhante a Javascript The good, bad and ugly parts

Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - ComparandoWesley Lemos
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptxLuanDev1
 
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scopeCarlos Santos
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)Carlos Santos
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosWesley Lemos
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09Carlos Santos
 
Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Tales Andrade
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScriptClaudio Gamboa
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
LabMM3 - Aula teórica 16
LabMM3 - Aula teórica 16LabMM3 - Aula teórica 16
LabMM3 - Aula teórica 16Carlos Santos
 
Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Helder da Rocha
 

Semelhante a Javascript The good, bad and ugly parts (20)

Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - Comparando
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptx
 
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
Javascript
JavascriptJavascript
Javascript
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - Conceitos
 
JavaScript das Ruas
JavaScript das RuasJavaScript das Ruas
JavaScript das Ruas
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 
Árvore Binária em C
Árvore Binária em CÁrvore Binária em C
Árvore Binária em C
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
LabMM3 - Aula teórica 16
LabMM3 - Aula teórica 16LabMM3 - Aula teórica 16
LabMM3 - Aula teórica 16
 
Scjp - Assignments
Scjp - AssignmentsScjp - Assignments
Scjp - Assignments
 
Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014
 

Javascript The good, bad and ugly parts

  • 1. Javascript The good, bad and ugly parts Fabian Carlos Meoapp Prospecta-me
  • 3. Você pode fazer uma aplicação web, mobile e desktop em Javascript.
  • 4. Particularidades ● Não tem classes apenas objetos ● Notação literal de objetos ● boolean, number e string ● null e undefined
  • 5. Partes ruins ● Programação baseadas em variáveis globais ● + para adição e concatenação ● Escopo estranho ● == e !=
  • 6. Descobrindo os tipos typeof "Douglas Crockford" // "string" typeof 1999 // "number" typeof {} // "object" typeof [1,2,3,4,5] // "object" ??? typeof null // "object" ??? typeof NaN // "object" ???
  • 7. É igual? '' == '0' // false 0 == '0' // true 0 == '0' // true false == 'false' // false false == '0' // true false == 0 // true false == undefined // false false == null // false null == undefined // true " trn " == 0 // true
  • 8. Agora sim é igual! '' === '0' // false 0 === '0' // false 0 === '0' // false false === 'false' // false false === '0' // false false === 0 // false false === undefined // false false === null // false null === undefined // false " trn " === 0 // false
  • 9. Números 0.1 + 0.2 === 0.3 // false ??? 0.1 + 0.2 == 0.3 // false ??? // 0.1 + 0.2 -> 0.30000000000000004
  • 10. Números ● Number 64-bit floating point ● Semelhante a Double em Java
  • 11. Hoisting ● As variáveis dentro de uma função, irão agir como se tivessem sido declaradas no topo da função. meu_var = "global"; function func(){ console.log(meu_var); // undefined, o mesmo que var my_name = undefined; var meu_var = "local"; console.log(meu_var); // local } func();
  • 12. Parecia uma boa ideia, só que não ● Omitir ponto e virgula ● Blocos sem chaves ● false, null, undefined, NaN e Infinity
  • 13. Onde usar ponto e virgula // Não precisa de ponto e virgula if (...) {...} else {...} for (...) {...} while (...) {...} // Precisa de ponto e virgula var x = 1; var fun = function() {...}; var obj = {};
  • 14. Blocos sem chaves if (true) console.log("OK"); else console.log("OK TOO");
  • 15. Blocos com chaves if (true){ console.log("OK"); }else{ console.log("OK TOO"); }
  • 16. Onde colocar a chave if (true) { console.log("OK"); } if (true) { console.log("OK"); }
  • 17. Onde colocar a chave function cosmos(){ return { name: "Carl sagan" } }
  • 18. Onde colocar a chave function cosmos(){ return undefined; { name: "Carl sagan" } }
  • 19. Onde colocar a chave function cosmos(){ return { name: "Carl sagan" } }
  • 20. Partes boas ● Tipificação fraca. ● Objetos dinâmicos. ● Declaração de objetos literais.
  • 21. Tipificação fraca var nome = "Nicolas Tesla"; var idade = 43; var peso = 75.7; var cientista = true; console.log(nome); // "Nicolas Tesla" console.log(idade); // 43 console.log(peso); // 75.7 console.log(cientista); // true
  • 22. Objetos dinâmicos var data = { 'one': 1, 'two': 2, 'three': 3 }; data["four"] = 4; console.log(data.four); // 4 console.log(data["four"]); // 4
  • 23. Objetos literais var pessoa_literal = { init: function (nome) { this.nome = nome; } }; var pessoa_literal = pessoa_literal; pessoa_literal.nome = "Neil Tyson'" var pessoa_literal_2 = pessoa_literal; pessoa_literal_2.nome = "Carl Sagan"; console.log(pessoa_literal.nome); // "Carl Sagan" console.log(pessoa_literal_2.nome); // "Carl Sagan"
  • 24. Objetos construtores function PessoaConstrutor(nome) { this.nome = nome; } var pessoa_construtor = new PessoaConstrutor('Neil Tyson'); var outra_construtor = new PessoaConstrutor('Carl Sagan'); console.log(pessoa_construtor.nome); // "Neil Tyson" console.log(outra_construtor.nome); // "Carl Sagan'"
  • 25. Novas boas partes em ES6 ● let ● Arrow Functions ou Fat Arrows. ● Default Arguments. ● Template Strings.
  • 26. Let ● Não existe o comportamento de hoisting. let cientista = true; if (cientista) { let nome = 'Neil Tyson'; console.log(nome); // 'Neil Tyson' }
  • 27. Arrow Functions // Convencional var soma = function(x, y) { return x + y; }; // ES6 var soma = (x, y) => x + y; soma(5, 5); // 10
  • 28. Default arguments // CoffeeScript cientista = (nome = "Carl Sagan") -> console.log(nome) // ES6 var cientista = function(nome = "Carl Sagan") { console.log(nome); }
  • 29. Template Strings var old_cosmos = "Carl Sagan" var new_cosmos = "Neil deGrasse Tyson" ` Cosmos, é uma série americana de documentário científico. É uma continuação da série de 1980, que foi apresentada por ${old_cosmos}. O apresentador da nova série é o físico ${new_cosmos}. `
  • 30. The best is yet to come