SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
JavaScript Hacks
Caio Ribeiro Pereira
about me
Web Developer na Concrete Solutions
Entusiasta JavaScript e Node.js
Participo do NodeBR, Meteor Brasil e
DevInSantos
http://casadocodigo.com.br
my books
VanillaMasker
A pure javascript input mask
Biblioteca minimalista que aplica máscara em inputs
Não usa jQuery ou Zepto, é puro javascript!
Extremamente leve (1 kbyte) em 160 linhas de código!
Mask money e mask patterns
Compatível com Bower e Meteor via AtmosphereJS
Github: bankfacil.github.io/vanilla-masker
Let's hack!
Caching array.length num loop
for (var i = 0; i < array.length; i++) {
console.log(array[i]);
}
for (var i = 0, len = array.length; i < len; i++) {
console.log(array[i]);
}
O cache evita contar o tamanho do array a cada iteração
Sem cache
Com cache
Elementos do final do array
var array = [1,2,3,4,5,6];
console.log(array.slice(-1)); // [6]
console.log(array.slice(-2)); // [5,6]
console.log(array.slice(-3)); // [4,5,6]
var array = [1,2,3,4,5,6];
console.log(array[array.length-1]); // 6
Pegando último elemento usando array.length - 1
Pegando último elemento usando array.slice()
Combinando arrays
var array1 = [1,2,3];
var array2 = [4,5,6];
array1.concat(array2); // [1,2,3,4,5,6]
var array1 = [1,2,3];
var array2 = [4,5,6];
Array.prototype.push.apply(array1, array2);
console.log(array1); // [1,2,3,4,5,6]
O push.apply() é otimizado, pois ele trabalha em cima de um
array existente enquanto o concat cria um novo array.
Combinando arrays com concat…
Combinando arrays com push.apply…
Convertendo NodeList para array
<html>
<body>
<p>item1</p>
<p>item2</p>
<p>item3</p>
</body>
</html>
var itens = document.querySelectorAll(“p”);
var array = [].slice.call(itens);
Esta ação libera as funções de array para um NodeList
Array shuffle
var array = [1,2,3,4,5,6];
array.sort(function(){ Math.random()-0.5 })
Array.prototype.shuffle = function() {
return this.sort(function(){Math.random()-0.5});

};
var array = [1,2,3,4,5,6];
array.shuffle(); // [3,4,2,1,5,6]
ou
Útil para embaralhar elementos de um array.
Convertendo para Numbers
console.log(+”1234”); // 1234
console.log(+”not a number”); // NaN
O operador "+" converte uma string para number.
Se o valor for inválido ele retorna um NaN (Not A Number)
O operador "+" também converte Date para milisegundos.
console.log(+new Date()); // 1303319203123
Convertendo para boolean
O operador "!!" converte variáveis para boolean
Valores falsos: false, 0, null, "" ou NaN.
Valores verdadeiros: qualquer coisa diferente de valores falsos.
function User(email, nick) {
this.email = email;
this.nick = nick;
this.hasNick = !!nick;
}
var user = new User(“user@mail.com”);
console.log(user.hasNick); // false
Condicional inline com short-circuits
if (user.hasNick) {
console.log(user.nick);
}
user.hasNick && console.log(user.nick);
if (!user.hasNick) {
user.nick = user.email;
}
(!user.hasNick) && (user.nick = user.email);
condicional que executa uma função
condicional que atribui um valor para um objeto
versão inline
versão inline
Default values
function User(email, nick) {
this.email = email;
this.nick = nick || email;
}
var user = new User(“user@mail.com”);
console.log(user.nick); // user@mail.com
Utilize o operador "||" entre uma variável e um valor default
Replace all
var names = “joao joao”;
names.replace(/ao/, “ana”); // “joana joao”
var names = “joao joao”;
names.replace(/ao/g, “ana”); // “joana joana”
A função replace() por default substitui apenas uma ocorrência
Para substituir N ocorrências utilize o parâmetro "/g"
Float to Integer
var value = 100.1233123;
console.log(~~value); // 100
O operador "~~" converte float para integer
Calculando idade
// 24 * 3600 * 365.25 * 1000 = 31557600000
function calcAge(birthday) {
return ~~(((+new Date) - (+birthday)) / 31557600000);
}
calcAge(new Date(1985,1,1)); // 29
Função minimalista que calcula uma idade
Fonte: http://jsperf.com/birthday-calculation
Thanks!
Blog http://udgwebdev.com
Github https://github.com/caio-ribeiro-pereira
Twitter @crp_underground

Mais conteúdo relacionado

Mais procurados

ODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryMarketing Digital ODIG
 
Iniciando com javaScript 2017
Iniciando com javaScript 2017Iniciando com javaScript 2017
Iniciando com javaScript 2017Romualdo Andre
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURLricardophp
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasRodrigo Branas
 
Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Rafael Ponte
 
Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)kidh0
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9Nando Vieira
 
Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Rafael Ponte
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersHarlley Oliveira
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-androidAlberto Souza
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScriptClaudio Gamboa
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSMatheus Donizete
 

Mais procurados (20)

ODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQuery
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Iniciando com javaScript 2017
Iniciando com javaScript 2017Iniciando com javaScript 2017
Iniciando com javaScript 2017
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURL
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo Branas
 
DevOps Braga #5
DevOps Braga #5DevOps Braga #5
DevOps Braga #5
 
Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
 
Node.js no Pagar.me
Node.js no Pagar.meNode.js no Pagar.me
Node.js no Pagar.me
 
Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)
 
Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
 
OOP ObjC
OOP ObjCOOP ObjC
OOP ObjC
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JS
 
Introdução a worker
Introdução a workerIntrodução a worker
Introdução a worker
 
Java script aula 07 - j-query
Java script   aula 07 - j-queryJava script   aula 07 - j-query
Java script aula 07 - j-query
 

Destaque

A tabela básica da Série A do Campeonato Brasileiro de 2017
A tabela básica da Série A do Campeonato Brasileiro de 2017A tabela básica da Série A do Campeonato Brasileiro de 2017
A tabela básica da Série A do Campeonato Brasileiro de 2017Cassio Zirpoli
 
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de SitesCaelum
 

Destaque (6)

Node.js for Noobs
Node.js for NoobsNode.js for Noobs
Node.js for Noobs
 
Boas práticas de API Design
Boas práticas de API DesignBoas práticas de API Design
Boas práticas de API Design
 
Javascript nos dias de hoje
Javascript nos dias de hojeJavascript nos dias de hoje
Javascript nos dias de hoje
 
A tabela básica da Série A do Campeonato Brasileiro de 2017
A tabela básica da Série A do Campeonato Brasileiro de 2017A tabela básica da Série A do Campeonato Brasileiro de 2017
A tabela básica da Série A do Campeonato Brasileiro de 2017
 
Redes linux excerto
Redes linux excertoRedes linux excerto
Redes linux excerto
 
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
 

Semelhante a JavaScript Hacks para Aprimorar seu Código

TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Jstdc-globalcode
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - FunctionsWesley Lemos
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptxLuanDev1
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
SOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistasSOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistaslucashungaro
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage apiSuissa
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009Caue Guerra
 
Threads tasks e o tal do thread pool
Threads tasks e o tal do thread poolThreads tasks e o tal do thread pool
Threads tasks e o tal do thread poolFabrício Rissetto
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compactoLuciano Ramalho
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosHenrique Gogó
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoPaulo Morgado
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosGregorio Kusowski
 

Semelhante a JavaScript Hacks para Aprimorar seu Código (20)

TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
Fundamentos de C#
Fundamentos de C#Fundamentos de C#
Fundamentos de C#
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - Functions
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptx
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
SOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistasSOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistas
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage api
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009
 
App scala
App scalaApp scala
App scala
 
Threads tasks e o tal do thread pool
Threads tasks e o tal do thread poolThreads tasks e o tal do thread pool
Threads tasks e o tal do thread pool
 
Javascript
JavascriptJavascript
Javascript
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Kotlin no desenvolvimento Mobile - FTSL
Kotlin no desenvolvimento Mobile - FTSLKotlin no desenvolvimento Mobile - FTSL
Kotlin no desenvolvimento Mobile - FTSL
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectados
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPonto
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 

JavaScript Hacks para Aprimorar seu Código

  • 2. about me Web Developer na Concrete Solutions Entusiasta JavaScript e Node.js Participo do NodeBR, Meteor Brasil e DevInSantos
  • 4. VanillaMasker A pure javascript input mask Biblioteca minimalista que aplica máscara em inputs Não usa jQuery ou Zepto, é puro javascript! Extremamente leve (1 kbyte) em 160 linhas de código! Mask money e mask patterns Compatível com Bower e Meteor via AtmosphereJS Github: bankfacil.github.io/vanilla-masker
  • 6. Caching array.length num loop for (var i = 0; i < array.length; i++) { console.log(array[i]); } for (var i = 0, len = array.length; i < len; i++) { console.log(array[i]); } O cache evita contar o tamanho do array a cada iteração Sem cache Com cache
  • 7. Elementos do final do array var array = [1,2,3,4,5,6]; console.log(array.slice(-1)); // [6] console.log(array.slice(-2)); // [5,6] console.log(array.slice(-3)); // [4,5,6] var array = [1,2,3,4,5,6]; console.log(array[array.length-1]); // 6 Pegando último elemento usando array.length - 1 Pegando último elemento usando array.slice()
  • 8. Combinando arrays var array1 = [1,2,3]; var array2 = [4,5,6]; array1.concat(array2); // [1,2,3,4,5,6] var array1 = [1,2,3]; var array2 = [4,5,6]; Array.prototype.push.apply(array1, array2); console.log(array1); // [1,2,3,4,5,6] O push.apply() é otimizado, pois ele trabalha em cima de um array existente enquanto o concat cria um novo array. Combinando arrays com concat… Combinando arrays com push.apply…
  • 9. Convertendo NodeList para array <html> <body> <p>item1</p> <p>item2</p> <p>item3</p> </body> </html> var itens = document.querySelectorAll(“p”); var array = [].slice.call(itens); Esta ação libera as funções de array para um NodeList
  • 10. Array shuffle var array = [1,2,3,4,5,6]; array.sort(function(){ Math.random()-0.5 }) Array.prototype.shuffle = function() { return this.sort(function(){Math.random()-0.5});
 }; var array = [1,2,3,4,5,6]; array.shuffle(); // [3,4,2,1,5,6] ou Útil para embaralhar elementos de um array.
  • 11. Convertendo para Numbers console.log(+”1234”); // 1234 console.log(+”not a number”); // NaN O operador "+" converte uma string para number. Se o valor for inválido ele retorna um NaN (Not A Number) O operador "+" também converte Date para milisegundos. console.log(+new Date()); // 1303319203123
  • 12. Convertendo para boolean O operador "!!" converte variáveis para boolean Valores falsos: false, 0, null, "" ou NaN. Valores verdadeiros: qualquer coisa diferente de valores falsos. function User(email, nick) { this.email = email; this.nick = nick; this.hasNick = !!nick; } var user = new User(“user@mail.com”); console.log(user.hasNick); // false
  • 13. Condicional inline com short-circuits if (user.hasNick) { console.log(user.nick); } user.hasNick && console.log(user.nick); if (!user.hasNick) { user.nick = user.email; } (!user.hasNick) && (user.nick = user.email); condicional que executa uma função condicional que atribui um valor para um objeto versão inline versão inline
  • 14. Default values function User(email, nick) { this.email = email; this.nick = nick || email; } var user = new User(“user@mail.com”); console.log(user.nick); // user@mail.com Utilize o operador "||" entre uma variável e um valor default
  • 15. Replace all var names = “joao joao”; names.replace(/ao/, “ana”); // “joana joao” var names = “joao joao”; names.replace(/ao/g, “ana”); // “joana joana” A função replace() por default substitui apenas uma ocorrência Para substituir N ocorrências utilize o parâmetro "/g"
  • 16. Float to Integer var value = 100.1233123; console.log(~~value); // 100 O operador "~~" converte float para integer
  • 17. Calculando idade // 24 * 3600 * 365.25 * 1000 = 31557600000 function calcAge(birthday) { return ~~(((+new Date) - (+birthday)) / 31557600000); } calcAge(new Date(1985,1,1)); // 29 Função minimalista que calcula uma idade Fonte: http://jsperf.com/birthday-calculation