Slide 1

Slide 1 text

JavaScript Hacks Caio Ribeiro Pereira

Slide 2

Slide 2 text

about me Web Developer na Concrete Solutions Entusiasta JavaScript e Node.js Participo do NodeBR, Meteor Brasil e DevInSantos

Slide 3

Slide 3 text

http:/ /casadocodigo.com.br my books

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Let's hack!

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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()

Slide 8

Slide 8 text

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…

Slide 9

Slide 9 text

Convertendo NodeList para array

item1

item2

item3

var itens = document.querySelectorAll(“p”); var array = [].slice.call(itens); Esta ação libera as funções de array para um NodeList

Slide 10

Slide 10 text

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.

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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(“[email protected]”); console.log(user.hasNick); // false

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Default values function User(email, nick) { this.email = email; this.nick = nick || email; } var user = new User(“[email protected]”); console.log(user.nick); // [email protected] Utilize o operador "||" entre uma variável e um valor default

Slide 15

Slide 15 text

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"

Slide 16

Slide 16 text

Float to Integer var value = 100.1233123; console.log(~~value); // 100 O operador "~~" converte float para integer

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Thanks! Blog http:/ /udgwebdev.com Github https:/ /github.com/caio-ribeiro-pereira Twitter @crp_underground