SlideShare uma empresa Scribd logo
Introdução ao JavaScript SAPO http://www.sapo.pt/ tmn http://developers.tmn.pt/ Cláudio Gamboa 19 de Maio 2010 < [email_address] > [email_address]
JavaScript É uma linguagem de programação É pequena, mas é sofisticada Tem alguns erros de implementação Corre principalmente no browser, mas está-se a passar para o servidor  Os standards são definidos pela ECMAScript desde 1998 [email_address]
JavaScript É ”scriptable”  Usa objectos como containers Tem herança por prototype –  (objectos herdam de outros objectos e não de classes)   ” Linkavel” por variáveis globais [email_address]
JavaScript Variáveis e tipos de variáveis Number String Boolean Object null undefined  [email_address] typeof (5);  //  number typeof ('some text');  //  string typeof (true);  //  boolean typeof (new Object());  //  object typeof (new Array());  //  object typeof (varName);  //  undefined
JavaScript Variáveis e tipos de variáveis Number Tem apenas um tipo numérico, não tem ints nem floats 64-bit floating point IEEE-754 (Double)  Falhas no mapeamento de algumas operações [email_address] >>> 0.1 + 0.2  0.30000000000000004
JavaScript Variáveis e tipos de variáveis NaN Not a Number Resulta de operações com  undefined  ou de um erro na operação Operações com NaN = NaN NaN não é igual a nada, incluindo NaN :) [email_address] +'5' = 5 (number)  '5' + 4 = 54 +'5' + 4 = 9 +'a' = NaN  +'a' + 4 = NaN typeof(+'a' + 4);  //  number
JavaScript Variáveis e tipos de variáveis Number() Converte um valor para um número Usar para ”input values”  [email_address] <input type=”text” id=”inputform” value=”100” /> var   val  =  document .getElementById('inputform').value; typeof(val); //  string Number(val) * 0.20 = ... Number('aaa'); //  NaN  Number('123asd'); //  NaN
JavaScript Variáveis e tipos de variáveis parseInt() parseFloat()  Convertem um valor para um número Param no primeiro ”não dígito”  [email_address] parseInt('123aaa'); //  123 parseFloat('1.23bbb'); //  1.23 parseInt('08'); //  0 parseInt('08', 10);  //  8   parseInt('FF', 16);  //  255 parseInt('10', 2);  //  2   parseInt('ab123');  //  NaN   var  num = 12345.6789 num.toFixed(2);  //  12345.68
JavaScript Variáveis e tipos de variáveis Math Methods Math.PI Math.abs() Math.round() Math.floor() Math.random() Math.log() Math.sin()  Math.sqrt() Math.pow() [email_address] Math.abs('-123'); //  123 Math.round('5.67');  //  6 Math.floor('5.67'); //  5 Math.random();  //  0 < x < 1   Math.log(1);  //  0 Math.sin(Math.PI / 2); //  1  Math.sqrt(64);  //  8  Math.pow(2, 4);  //  16
JavaScript Variáveis e tipos de variáveis String É uma sequência de 0 ou mais caracteres 16-bit Encoding – Unicode (UCS-2) não UTF16 Não existe  char  –  char  é uma string.length = 1 Define-se com ' ' ou ” ”  'string'.length = número de caracteres  [email_address]
JavaScript Variáveis e tipos de variáveis String() Converte uma variável para uma string  Também se pode usar  variable+””   [email_address] var  myVar = 1;  typeof (myVar); //  number myVar = String(myVar); ou  myVar = myVar+'';  typeof(myVar); //  string
JavaScript Variáveis e tipos de variáveis String Methods charAt() indexOf() lastIndexOf()  match()  replace() substring() toLowerCase() toUpperCase() ... [email_address] 'abcd'.charAt(2);    //  c 'abcd'.indexOf('c');    //  2 'abcda'.lastIndexOf(a);    //  4 'abcda'.match(/(a|c)/);   //  [a,c,a]   'abcda'.replace(/(a|c)/g,'*'); //  *b*d* 'abcd'.substring(0,2);   //  ab  'abcd'.substring(1,2);   //  b  'abcd'.substr(1,2);   //  bc  'aBCd'.toLowerCase();    //  abcd 'aBCd'.toUpperCase();   //  ABCD
JavaScript Variáveis e tipos de variáveis Booleanos true false [email_address]
JavaScript Variáveis e tipos de variáveis Boolean() Retorna true se o valor é verdadeiro Retorna false se o valor é falso É o mesmo que  !! [email_address] Boolean(true); //  true Boolean(false);  //  false Boolean(123); //  true Boolean('false'); //  true   Boolean(0); //  false Boolean(1); //  true !!(0);  //  false !!(1); //  true !!('ab'); //  true
JavaScript Variáveis e tipos de variáveis null Valor que não é nada Mas é um valor :)  [email_address]
JavaScript Variáveis e tipos de variáveis undefined É um valor que ainda não é um valor :P É o valor default para qualquer variável [email_address] var  a = 1; var  b;  typeof(a); //  number typeof(c); //  undefined typeof(b); //  undefined
JavaScript Variáveis e tipos de variáveis Valores falsos false null undefined ”” 0 NaN [email_address] Boolean( * ) //  false
JavaScript Variáveis e tipos de variáveis Tudo o resto é verdadeiro true [email_address]
JavaScript Variáveis e tipos de variáveis E tudo o resto são Objectos [email_address]
JavaScript Variáveis e tipos de variáveis Object Objectos podem ser vistos como estruturas Objectos podem ser vistos como hash tables Criam-se com  new Object   {}  (Object literal)  O nome dos membros pode ser qualquer string O valor dos membros também, excepto  undefined Acede-se aos membros com: obj.membro obj['membro'] [email_address]
JavaScript Variáveis e tipos de variáveis Objects [email_address] var  pessoa = { nome: 'Ze Manel', idade: 29, cidade: 'Lisboa',  programa: function(){} }; pessoa nome idade cidade o que faz? (método) Ze Manel 29 Lisboa programa()
JavaScript Variáveis e tipos de variáveis Variáveis Podem começar por qualquer letra  [a-z] ,  _ ,  $   Devem ser declaradas com:  var  nome_da_variavel; _  na spec é reservada para implementações internas $  na spec está reservada para as máquinas - MACROS Não podem ser palavras reservadas [email_address]
JavaScript Variáveis e tipos de variáveis Palavras reservadas [email_address]
JavaScript Comentários /* ... */  // ... [email_address] /* vou fazer um alert */ alert('Hello World');  // foi feito um alert('Hello World')
JavaScript Operadores Aritméticos +, -, *, /, % Comparação ==, !=, <, >, <=, >=, ===, !==  Lógicos &&, ||, ! Bitwise & (AND), | (OR), ^ (XOR), ~ (NOT),  >> (Shift right w/ sign),  >>> (Shift right w/ zero fill), << (Shift left) Ternários  ?: [email_address]
JavaScript Operadores + Soma – Se dois valores forem números vai somar Concatenação – Se não forem vai concatenar Faz conversão para números [email_address] 2 + 3  //  5 '2' + 3  //  23 'a' + 2 + 3 //  a23 +'2' + 3 //  5 2 + 3 + 'a' //  5a
JavaScript Operadores ==, != Fazem comparação Podem produzir colisão de tipos Usar: ===, !==  [email_address] (2 == 2) //  true (2 != 3) //  true (2 != 2) //  false ('a' == 'a') //  true (1 == true) //  true (1 === true) //  false
JavaScript Operadores && ” e...” Se o primeiro existir (!= null) retorna o segundo Se não existir, retorna o primeiro [email_address] a = 5; b = null; (a && b) //  null (b && a) //  null
JavaScript Operadores || ” ou...” Se o primeiro for falso retorna o segundo Se não for, retorna o primeiro – retorna o primeiro que encontrar [email_address] a = 5; b = null; c = null;  (a || b) //  5 (b || c || a) //  5 (b || c) //  null
JavaScript Statements expressão if switch while do..while for break continue return try..catch..finally throw [email_address]
JavaScript statements for [email_address] for( var  i=0; i < 5; i++) { alert(i); } // iterar num array   for( var  i=0; i < myArray.length; i++) { myArray[i]; ... } // iterar num objecto for( var  i in myObject) { if(myObject.hasOwnProperty(i)) { /* verificar sempre se ”i” é propriedade do objecto */ myObject[i]; ... } }
JavaScript statements labels Pode haver labels (identificadores) do / for / switch / while break  pode-se referir aos labels javascript:  não pode ser usado como label [email_address] loop : for(var i=0; i < 5; i++) { for(var j=0; j < 2; j++) { if(i == 3) { break  loop ; } alert(j +' => '+ i); } } alert('final'); break  loop ; 0 => 0 1 => 0 0 => 1 1 => 1  0 => 2  1 => 2 final break; 0 => 0 1 => 0 0 => 1 1 => 1  0 => 2  1 => 2 0 => 4 1 => 4 final
JavaScript statements throw Gera um objecto de excepção [email_address] throw {name:'nome_da_excepcao', message:'razão da excepcão'}  // ou throw new Error('razão');
JavaScript statements try..catch..finally ” Apanha” a excepção [email_address] function F() { try { alert(5 + aa) } catch(err) { // err objecto do erro alert(err.message); return; } } F(); function F() { try { alert(5 + aa) } catch(err) { // err objecto do erro alert(err.message); return; }  finally { alert('fim'); } } F();
JavaScript funções e scopes function funcName() { ... } Apenas uma função define um scope [email_address]
JavaScript funções e scopes var Define uma variável num scope [email_address]
JavaScript funções e scopes scope É um bloco em que as variáveis definidas dentro dele são privadas  Blocos/statements {} não definem um scope Scopes são apenas definidos por funções [email_address] var  a = 1; function F() { var  b = 2; c = 3; alert(a); alert(b); alert(c); } F();  //  1 // 2 // 3 alert(a); //  1 alert(b); //  undefined alert(c); //  3 var  a = 1; var  b = 3; function F() { var  a = 2; b = 4; alert(a); alert(window.a); alert(b); } F();  //  2 //  1 //  4 alert(a) //  1 alert(b) //  4
JavaScript funções e scopes scope No JavaScript 1.7 foi introduzido o ”let” <script type=&quot;text/javascript;version=1.7&quot;> [email_address] function F() { let  a = 2; if(true) { let  a = 666; alert(a); //  666 } alert(a); //  2 }
JavaScript funções e scopes return return expression; return; [email_address] function F1() { return 'Hello'; } function F2() { return; } alert(F1()); //  Hello alert(F2()); //  undefined
JavaScript ... É capaz de ser hora de comer...  [email_address] var sInt = setInterval(function() { comer(); falar();  }, 1000);  setTimeout(function(){ clearInterval(sInt); pensarEmVoltarPraSala();  }, 10 * 60 * 1000); setTimeout(function(){ voltarPraSala();  }, 15 * 60 * 1000);
JavaScript Objectos... Sim, outra vez :)  [email_address]
JavaScript objects Object Objectos são copiados por referência: [email_address] // Declaração var  pessoa = new Object();  ou var  pessoa = {}; // Atribuição pessoa.nome = 'Ze Manel'; pessoa.idade = '29'; pessoa['for'] = 'javascript';  var   oA  = {num: 333}; var   oB  =  oA ;  alert( oB .num); //  333 oB .num = 666; alert( oB .num); //  666 alert( oA .num);  //  666 var   A  = 333; var   B  =  A ;  alert( B ); //  333 B  = 666; alert( B ); //  666 alert( A ); //  333
JavaScript objects Object literal :  a separar membro do valor ,  a separar os pares nome/valor [email_address] var  pessoa = { nome: 'Ze Manel', idade: 29, careca: false, bandas: ['Emperor', 'Opeth', '...'], animais: { gatos: 2, caes: 0   }, ' for ': 'javascript', filhos: null }; pessoa.nome; //  Ze Manel pessoa['nome'];  //  Ze Manel pessoa['for']; //  javascript
JavaScript objects Object literal Útil para definir como argumento para uma função [email_address] function criarInput(type, id, value) { ... } criarInput('text', ... Ermm... qual a ordem?  --------------------------------------------- function criarInput(obj) { ... elm.type = obj.type; elm.id = obj.id; elm.value = obj.value; } criarInput({type:'button', id:'myid', value:''});
JavaScript objects delete Apaga um membro de um objecto [email_address] var  obj = { primeiro_nome: 'Ze', ultimo_nome: 'Manel' };  delete obj['primeiro_nome']; obj.toSource(); //  {ultimo_nome:'Manel'}  FF only SAPO.Utility.Dumper.windowDump();
JavaScript arrays Array Os arrays herdam dos objectos typeof( array ) // object Nomes dos membros são números Têm uma propriedade  length  que dá o tamanho [email_address] var  pessoa = [ 'Ze Manel', 29, 'Lisboa' ]; pessoa 0 1 2 Ze Manel 29 Lisboa
JavaScript arrays Array Iterar num array  Usa-se o for e não o for..in – for..in não especifica a ordem pela qual queremos percorrer o array [email_address] // usa-se o:  for(var i=0; i < array.length; i++) { } // ou:  for(var i = (array.length – 1); i >= 0; i–- ) { } // e não o:  for(var i in array) { }
JavaScript arrays Array Para criar um array: new Array() [] [email_address] var  myArray = new Array(); var  myArray = [];  var  myArray = new Array('Ze', 'Manel'); var  myArray = ['Ze', 'Manel'];
JavaScript arrays Array Adicionar Aceder [email_address] var  myArray = [];  // Adiciona myArray.push('Ze'); myArray[myArray.length] = 'Manel'; // Acede myArray[0]  //  Ze myArray[1]  //  Manel // e não myArray.0
JavaScript arrays Array Apagar/remover [email_address] var  myArray = ['a', 'b', 'c', 'd'];  alert(myArray);  //  a, b, c, d alert(myArray[0]); //  a myArray.splice(0, 1);  alert(myArray); //  b, c, d alert(myArray[0]);  //  b delete myArray[1]; alert(myArray); //  b, undefined, d
JavaScript arrays Array methods concat join push sort slice splice ... [email_address] var  a = ['a', 'b']; var  b = ['d', 'c']; a.concat(b);  //  ['a', 'b', 'd', 'c'] a.join('|');  //  'a|b|d|c' a.push('e');  //  ['a','b','d','c','e'] a.sort();  //  ['a','b','c','d','e']   a.slice(2,4); //  ['c','d']  a.splice(0,1); //  ['b','c','d','e']
JavaScript functions Functions Funções são classes de objectos Funções podem ser:  passadas retornadas guardadas (como outro valor qualquer) Funções também são herdadas de objectos Podem ser definidas onde quisermos, até mesmo dentro de outras funções  Definem um scope :)  [email_address] function myFunction() { ... }  // mesmo que var myFunction = function(){ ... }
JavaScript functions function Definição [email_address] function myFunction(x, y) { alert(x+' - '+y); } // ao invocar a função  myFunction('a', 'b', 'c') // c é ignorado //  a - b myFunction('a') // y será undefined //  a - undefined
JavaScript functions function Podem-se associar funções como valores de membros de  objectos  Passa a ser um método de um objecto [email_address] var  obj = { myFunction: function() { },  otherFunction: function() { /*  invocação dentro do objecto  */ this.myFunction(); } }  // invoca-se  obj.myFunction(); var  obj = {}; obj.myFunction = function() {}; obj.otherFunction = function(){ /*  invocação dentro do  objecto  */ this.myFunction(); }; // invoca-se  obj.myFunction();
JavaScript functions function Invocar uma função [email_address] // como função: functionName(args);  // como método dum objecto: objName.functionName(args);  // como construtor:  new  functionName(args);  // com o apply:  functionName. apply (objName, args); // é o mesmo que: objName.method = functionName; objName.method(args);
JavaScript functions this É o próprio objecto, mas depende da invocação [email_address] // como função: this = o objecto global  // como método dum objecto: this = o objecto  // como construtor:  this = o novo objecto que é instanciado
JavaScript functions arguments Quando uma função é invocada é criada uma variável interna ”arguments” É um objecto  array like [email_address] function myF() { alert(arguments[0]); alert(arguments[1]); alert(arguments.length); alert(arguments.callee); }  myF('a', 'b');  //  a //  b //  2   //  myF(){...}
JavaScript functions closures É criado com funções dentro de outras funções que têm acesso ao scope do pai Mesmo que a função pai tenha terminado, a função filha continua a correr e continua com acesso ao pai [email_address]
JavaScript functions closures [email_address] function abre(id) { var  elm = document.getElementById(id); var  tamanho = 0; function vaiAbrindo() { if(tamanho < 100) { tamanho = tamanho + 5; elm.style.height = tamanho+'px'; setTimeout(vaiAbrindo, 100); } } setTimeout(vaiAbrindo, 100); }
JavaScript functions closures [email_address] // ir a www.sapo.pt, escrever isto no Firebug e executar var  s = 'border:1px solid red; height:0px; width:300px;'; document .body.innerHTML = '<div id=&quot;myid&quot; style=&quot;'+s+'&quot;></div>'; function abre(id) { var  elm =  document .getElementById(id); var  tamanho = 0; function vaiAbrindo() { if(tamanho < 100) { tamanho = tamanho + 5; elm.style.height = tamanho+'px'; setTimeout(vaiAbrindo, 100); } } setTimeout(vaiAbrindo, 100); } abre('myid');
JavaScript functions Podem-se estender ”Built-in types” Object.prototype Array.prototype Function.prototype String.prototype Number.prototype Boolean.prototype [email_address] String.prototype.trim = function() { return this.replace(/^\s+|\s+$|\n+$/g, ''); } // Passamos a ter: var str = '  abcd  '; str.trim(); // 'abcd'
JavaScript typeof() Diz-nos de que tipo é um valor [email_address] tipo Vs. typeof Vs. constructor object - object - Object function - function - Function array - object - Array number - number - Number  string - string - String  boolean - boolean - Boolean null - object - error... undefined - undefined - error...
JavaScript eval() É o compilador/interpretador de JavaScript do browser Executa uma string e retorna o resultado Usar apenas para JSON  [email_address] eval(&quot;a=5; b=4; alert(a+b);&quot;); //  9   function a() { alert('__a__'); }  function b(aFunction) { eval(aFunction)(); } b('a'); //  __a__
JavaScript Global scope Num browser a variável global é ” window ”  Tudo tem como pai/avô/bisavô o objecto ” window ”  Evitar poluir o ”scope global” com variáveis No SAPO, por exemplo, temos uma única variável global, o ”SAPO”  No SAPO deve-se evitar a variável ”SAPO” para não ter problemas com a LibSAPO.js ” Sapo”, ”sapo” também não, pois podem dar azo a confusões [email_address]
JavaScript O global scope Quando queremos meter um bloco de código num site é boa prática criar um scope com uma função anónima que se executa a ela própria [email_address] (function(){ var options = { mode: 2 }; SAPO.Widget.ShareThis(options); })(); window.options; //  undefined // senão seria:  window.options; //  {mode:2}
JavaScript Outros Objectos Date() RegExp() ... [email_address] new Date(); new RegExp(”[a-z]”, ”ig”);
JavaScript ainda há mais slides ? [email_address]
JavaScript só para conseguir fazer 69 slides :) (ainda falta um...) [email_address]
JavaScript slide 69 Cláudio Gamboa @email:  [email_address] @xmpp:  [email_address] @_:  http://www.sapo.pt @blog:  http://blog.pdvel.com/   @social: suskind [email_address]

Mais conteúdo relacionado

PDF
Svelte the future of frontend development
DOCX
Ensayo de php
PDF
Arquitetura de Software
PPTX
Blazor - An Introduction
PPT
Arquitectura en Capas
PPTX
SOA (arquitectura orientada a servicios)
PDF
JavaScript - Chapter 8 - Objects
PPTX
Fases del rup
Svelte the future of frontend development
Ensayo de php
Arquitetura de Software
Blazor - An Introduction
Arquitectura en Capas
SOA (arquitectura orientada a servicios)
JavaScript - Chapter 8 - Objects
Fases del rup

Mais procurados (20)

PDF
React
PPT
Desarrollo SW Basado en Componentes
PDF
Pruebas Unitarias
PPTX
Modelo cascata
PPT
Object Oriented Programming with Java
PPTX
Java features
PPSX
Analisis estructurado
PDF
Casos uso uml
PPTX
Teste de software - Processo de Verificação e Validação
PPT
PHP - Introduction to Object Oriented Programming with PHP
PDF
JavaScript Basics and Best Practices - CC FE & UX
PPTX
A Evolução do Front end
PDF
Programação Orientada a Objetos
PDF
Metodología de desarrollo de software basada en componentes
PDF
Magento 2 Design Patterns
PPTX
Functions in PHP.pptx
PDF
Introdução ao JavaScript
PDF
Algorithm Design.pdf
PDF
Programação Orientação a Objetos - Herança
PPTX
3. conceptos de calidad del software
React
Desarrollo SW Basado en Componentes
Pruebas Unitarias
Modelo cascata
Object Oriented Programming with Java
Java features
Analisis estructurado
Casos uso uml
Teste de software - Processo de Verificação e Validação
PHP - Introduction to Object Oriented Programming with PHP
JavaScript Basics and Best Practices - CC FE & UX
A Evolução do Front end
Programação Orientada a Objetos
Metodología de desarrollo de software basada en componentes
Magento 2 Design Patterns
Functions in PHP.pptx
Introdução ao JavaScript
Algorithm Design.pdf
Programação Orientação a Objetos - Herança
3. conceptos de calidad del software
Anúncio

Destaque (17)

PDF
JavaScript de qualidade: hoje, amanhã e sempre!
PDF
NoSQL na BIREME: 20 anos de experiência
PDF
JavaScript agora é sério (TDC 2011)
PDF
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
PDF
Java script
PDF
It's Javascript Time
PPT
Aula javascript
PDF
Aprender Javascript e jQuery (UFCD
PDF
Javascript, Done Right
PDF
DOMinando JavaScript
PPTX
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
PDF
Introdução a JavaScript
PPT
Minicurso de JavaScript (Portuguese)
PDF
Javascript aula 01 - visão geral
PPTX
Desvendando a linguagem JavaScript
PDF
JavaScript
PPT
Javascript levado a serio
JavaScript de qualidade: hoje, amanhã e sempre!
NoSQL na BIREME: 20 anos de experiência
JavaScript agora é sério (TDC 2011)
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script
It's Javascript Time
Aula javascript
Aprender Javascript e jQuery (UFCD
Javascript, Done Right
DOMinando JavaScript
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Introdução a JavaScript
Minicurso de JavaScript (Portuguese)
Javascript aula 01 - visão geral
Desvendando a linguagem JavaScript
JavaScript
Javascript levado a serio
Anúncio

Semelhante a tmn - Introdução ao JavaScript (20)

PDF
Javascript tutorial
PPTX
JavaScript "for dummies"
PDF
Linguagem de programação JavaScript.pdf
PPTX
Introdução ao JS1.pptx
PDF
LabMM3 - Aula teórica 05
PPTX
Javascript basics
PDF
JavaScript - A Linguagem
PDF
JS - JavaScript.pdf
PDF
PDF
JavaScript for Beginners
PPTX
Javascript para CSharpers 1 - Comparando
PDF
Introdução à MEAN Stack
PDF
T04_LM3: Javascript (2013-2014)
PDF
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
PPTX
Developer day 2010 - javascript
PPTX
Javascript
PDF
Curso javascript básico
PDF
Tutorial java script orientado à objeto e jquery
PPT
Aula2
PDF
Apostila de ext js com php e postgresql v1.0
Javascript tutorial
JavaScript "for dummies"
Linguagem de programação JavaScript.pdf
Introdução ao JS1.pptx
LabMM3 - Aula teórica 05
Javascript basics
JavaScript - A Linguagem
JS - JavaScript.pdf
JavaScript for Beginners
Javascript para CSharpers 1 - Comparando
Introdução à MEAN Stack
T04_LM3: Javascript (2013-2014)
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
Developer day 2010 - javascript
Javascript
Curso javascript básico
Tutorial java script orientado à objeto e jquery
Aula2
Apostila de ext js com php e postgresql v1.0

Último (19)

PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Aula04-Academia Heri- Tecnologia Geral 2025
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Aula 18 - Manipulacao De Arquivos python
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
COBITxITIL-Entenda as diferença em uso governança TI
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Processos na gestão de transportes, TM100 Col18
Custos e liquidação no SAP Transportation Management, TM130 Col18
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Apple Pippin Uma breve introdução. - David Glotz
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...

tmn - Introdução ao JavaScript

  • 1. Introdução ao JavaScript SAPO http://www.sapo.pt/ tmn http://developers.tmn.pt/ Cláudio Gamboa 19 de Maio 2010 < [email_address] > [email_address]
  • 2. JavaScript É uma linguagem de programação É pequena, mas é sofisticada Tem alguns erros de implementação Corre principalmente no browser, mas está-se a passar para o servidor Os standards são definidos pela ECMAScript desde 1998 [email_address]
  • 3. JavaScript É ”scriptable” Usa objectos como containers Tem herança por prototype – (objectos herdam de outros objectos e não de classes) ” Linkavel” por variáveis globais [email_address]
  • 4. JavaScript Variáveis e tipos de variáveis Number String Boolean Object null undefined [email_address] typeof (5); // number typeof ('some text'); // string typeof (true); // boolean typeof (new Object()); // object typeof (new Array()); // object typeof (varName); // undefined
  • 5. JavaScript Variáveis e tipos de variáveis Number Tem apenas um tipo numérico, não tem ints nem floats 64-bit floating point IEEE-754 (Double) Falhas no mapeamento de algumas operações [email_address] >>> 0.1 + 0.2 0.30000000000000004
  • 6. JavaScript Variáveis e tipos de variáveis NaN Not a Number Resulta de operações com undefined ou de um erro na operação Operações com NaN = NaN NaN não é igual a nada, incluindo NaN :) [email_address] +'5' = 5 (number) '5' + 4 = 54 +'5' + 4 = 9 +'a' = NaN +'a' + 4 = NaN typeof(+'a' + 4); // number
  • 7. JavaScript Variáveis e tipos de variáveis Number() Converte um valor para um número Usar para ”input values” [email_address] <input type=”text” id=”inputform” value=”100” /> var val = document .getElementById('inputform').value; typeof(val); // string Number(val) * 0.20 = ... Number('aaa'); // NaN Number('123asd'); // NaN
  • 8. JavaScript Variáveis e tipos de variáveis parseInt() parseFloat() Convertem um valor para um número Param no primeiro ”não dígito” [email_address] parseInt('123aaa'); // 123 parseFloat('1.23bbb'); // 1.23 parseInt('08'); // 0 parseInt('08', 10); // 8 parseInt('FF', 16); // 255 parseInt('10', 2); // 2 parseInt('ab123'); // NaN var num = 12345.6789 num.toFixed(2); // 12345.68
  • 9. JavaScript Variáveis e tipos de variáveis Math Methods Math.PI Math.abs() Math.round() Math.floor() Math.random() Math.log() Math.sin() Math.sqrt() Math.pow() [email_address] Math.abs('-123'); // 123 Math.round('5.67'); // 6 Math.floor('5.67'); // 5 Math.random(); // 0 < x < 1 Math.log(1); // 0 Math.sin(Math.PI / 2); // 1 Math.sqrt(64); // 8 Math.pow(2, 4); // 16
  • 10. JavaScript Variáveis e tipos de variáveis String É uma sequência de 0 ou mais caracteres 16-bit Encoding – Unicode (UCS-2) não UTF16 Não existe char – char é uma string.length = 1 Define-se com ' ' ou ” ” 'string'.length = número de caracteres [email_address]
  • 11. JavaScript Variáveis e tipos de variáveis String() Converte uma variável para uma string Também se pode usar variable+”” [email_address] var myVar = 1; typeof (myVar); // number myVar = String(myVar); ou myVar = myVar+''; typeof(myVar); // string
  • 12. JavaScript Variáveis e tipos de variáveis String Methods charAt() indexOf() lastIndexOf() match() replace() substring() toLowerCase() toUpperCase() ... [email_address] 'abcd'.charAt(2); // c 'abcd'.indexOf('c'); // 2 'abcda'.lastIndexOf(a); // 4 'abcda'.match(/(a|c)/); // [a,c,a] 'abcda'.replace(/(a|c)/g,'*'); // *b*d* 'abcd'.substring(0,2); // ab 'abcd'.substring(1,2); // b 'abcd'.substr(1,2); // bc 'aBCd'.toLowerCase(); // abcd 'aBCd'.toUpperCase(); // ABCD
  • 13. JavaScript Variáveis e tipos de variáveis Booleanos true false [email_address]
  • 14. JavaScript Variáveis e tipos de variáveis Boolean() Retorna true se o valor é verdadeiro Retorna false se o valor é falso É o mesmo que !! [email_address] Boolean(true); // true Boolean(false); // false Boolean(123); // true Boolean('false'); // true Boolean(0); // false Boolean(1); // true !!(0); // false !!(1); // true !!('ab'); // true
  • 15. JavaScript Variáveis e tipos de variáveis null Valor que não é nada Mas é um valor :) [email_address]
  • 16. JavaScript Variáveis e tipos de variáveis undefined É um valor que ainda não é um valor :P É o valor default para qualquer variável [email_address] var a = 1; var b; typeof(a); // number typeof(c); // undefined typeof(b); // undefined
  • 17. JavaScript Variáveis e tipos de variáveis Valores falsos false null undefined ”” 0 NaN [email_address] Boolean( * ) // false
  • 18. JavaScript Variáveis e tipos de variáveis Tudo o resto é verdadeiro true [email_address]
  • 19. JavaScript Variáveis e tipos de variáveis E tudo o resto são Objectos [email_address]
  • 20. JavaScript Variáveis e tipos de variáveis Object Objectos podem ser vistos como estruturas Objectos podem ser vistos como hash tables Criam-se com new Object {} (Object literal) O nome dos membros pode ser qualquer string O valor dos membros também, excepto undefined Acede-se aos membros com: obj.membro obj['membro'] [email_address]
  • 21. JavaScript Variáveis e tipos de variáveis Objects [email_address] var pessoa = { nome: 'Ze Manel', idade: 29, cidade: 'Lisboa', programa: function(){} }; pessoa nome idade cidade o que faz? (método) Ze Manel 29 Lisboa programa()
  • 22. JavaScript Variáveis e tipos de variáveis Variáveis Podem começar por qualquer letra [a-z] , _ , $ Devem ser declaradas com: var nome_da_variavel; _ na spec é reservada para implementações internas $ na spec está reservada para as máquinas - MACROS Não podem ser palavras reservadas [email_address]
  • 23. JavaScript Variáveis e tipos de variáveis Palavras reservadas [email_address]
  • 24. JavaScript Comentários /* ... */ // ... [email_address] /* vou fazer um alert */ alert('Hello World'); // foi feito um alert('Hello World')
  • 25. JavaScript Operadores Aritméticos +, -, *, /, % Comparação ==, !=, <, >, <=, >=, ===, !== Lógicos &&, ||, ! Bitwise & (AND), | (OR), ^ (XOR), ~ (NOT), >> (Shift right w/ sign), >>> (Shift right w/ zero fill), << (Shift left) Ternários ?: [email_address]
  • 26. JavaScript Operadores + Soma – Se dois valores forem números vai somar Concatenação – Se não forem vai concatenar Faz conversão para números [email_address] 2 + 3 // 5 '2' + 3 // 23 'a' + 2 + 3 // a23 +'2' + 3 // 5 2 + 3 + 'a' // 5a
  • 27. JavaScript Operadores ==, != Fazem comparação Podem produzir colisão de tipos Usar: ===, !== [email_address] (2 == 2) // true (2 != 3) // true (2 != 2) // false ('a' == 'a') // true (1 == true) // true (1 === true) // false
  • 28. JavaScript Operadores && ” e...” Se o primeiro existir (!= null) retorna o segundo Se não existir, retorna o primeiro [email_address] a = 5; b = null; (a && b) // null (b && a) // null
  • 29. JavaScript Operadores || ” ou...” Se o primeiro for falso retorna o segundo Se não for, retorna o primeiro – retorna o primeiro que encontrar [email_address] a = 5; b = null; c = null; (a || b) // 5 (b || c || a) // 5 (b || c) // null
  • 30. JavaScript Statements expressão if switch while do..while for break continue return try..catch..finally throw [email_address]
  • 31. JavaScript statements for [email_address] for( var i=0; i < 5; i++) { alert(i); } // iterar num array for( var i=0; i < myArray.length; i++) { myArray[i]; ... } // iterar num objecto for( var i in myObject) { if(myObject.hasOwnProperty(i)) { /* verificar sempre se ”i” é propriedade do objecto */ myObject[i]; ... } }
  • 32. JavaScript statements labels Pode haver labels (identificadores) do / for / switch / while break pode-se referir aos labels javascript: não pode ser usado como label [email_address] loop : for(var i=0; i < 5; i++) { for(var j=0; j < 2; j++) { if(i == 3) { break loop ; } alert(j +' => '+ i); } } alert('final'); break loop ; 0 => 0 1 => 0 0 => 1 1 => 1 0 => 2 1 => 2 final break; 0 => 0 1 => 0 0 => 1 1 => 1 0 => 2 1 => 2 0 => 4 1 => 4 final
  • 33. JavaScript statements throw Gera um objecto de excepção [email_address] throw {name:'nome_da_excepcao', message:'razão da excepcão'} // ou throw new Error('razão');
  • 34. JavaScript statements try..catch..finally ” Apanha” a excepção [email_address] function F() { try { alert(5 + aa) } catch(err) { // err objecto do erro alert(err.message); return; } } F(); function F() { try { alert(5 + aa) } catch(err) { // err objecto do erro alert(err.message); return; } finally { alert('fim'); } } F();
  • 35. JavaScript funções e scopes function funcName() { ... } Apenas uma função define um scope [email_address]
  • 36. JavaScript funções e scopes var Define uma variável num scope [email_address]
  • 37. JavaScript funções e scopes scope É um bloco em que as variáveis definidas dentro dele são privadas Blocos/statements {} não definem um scope Scopes são apenas definidos por funções [email_address] var a = 1; function F() { var b = 2; c = 3; alert(a); alert(b); alert(c); } F(); // 1 // 2 // 3 alert(a); // 1 alert(b); // undefined alert(c); // 3 var a = 1; var b = 3; function F() { var a = 2; b = 4; alert(a); alert(window.a); alert(b); } F(); // 2 // 1 // 4 alert(a) // 1 alert(b) // 4
  • 38. JavaScript funções e scopes scope No JavaScript 1.7 foi introduzido o ”let” <script type=&quot;text/javascript;version=1.7&quot;> [email_address] function F() { let a = 2; if(true) { let a = 666; alert(a); // 666 } alert(a); // 2 }
  • 39. JavaScript funções e scopes return return expression; return; [email_address] function F1() { return 'Hello'; } function F2() { return; } alert(F1()); // Hello alert(F2()); // undefined
  • 40. JavaScript ... É capaz de ser hora de comer... [email_address] var sInt = setInterval(function() { comer(); falar(); }, 1000); setTimeout(function(){ clearInterval(sInt); pensarEmVoltarPraSala(); }, 10 * 60 * 1000); setTimeout(function(){ voltarPraSala(); }, 15 * 60 * 1000);
  • 41. JavaScript Objectos... Sim, outra vez :) [email_address]
  • 42. JavaScript objects Object Objectos são copiados por referência: [email_address] // Declaração var pessoa = new Object(); ou var pessoa = {}; // Atribuição pessoa.nome = 'Ze Manel'; pessoa.idade = '29'; pessoa['for'] = 'javascript'; var oA = {num: 333}; var oB = oA ; alert( oB .num); // 333 oB .num = 666; alert( oB .num); // 666 alert( oA .num); // 666 var A = 333; var B = A ; alert( B ); // 333 B = 666; alert( B ); // 666 alert( A ); // 333
  • 43. JavaScript objects Object literal : a separar membro do valor , a separar os pares nome/valor [email_address] var pessoa = { nome: 'Ze Manel', idade: 29, careca: false, bandas: ['Emperor', 'Opeth', '...'], animais: { gatos: 2, caes: 0 }, ' for ': 'javascript', filhos: null }; pessoa.nome; // Ze Manel pessoa['nome']; // Ze Manel pessoa['for']; // javascript
  • 44. JavaScript objects Object literal Útil para definir como argumento para uma função [email_address] function criarInput(type, id, value) { ... } criarInput('text', ... Ermm... qual a ordem? --------------------------------------------- function criarInput(obj) { ... elm.type = obj.type; elm.id = obj.id; elm.value = obj.value; } criarInput({type:'button', id:'myid', value:''});
  • 45. JavaScript objects delete Apaga um membro de um objecto [email_address] var obj = { primeiro_nome: 'Ze', ultimo_nome: 'Manel' }; delete obj['primeiro_nome']; obj.toSource(); // {ultimo_nome:'Manel'} FF only SAPO.Utility.Dumper.windowDump();
  • 46. JavaScript arrays Array Os arrays herdam dos objectos typeof( array ) // object Nomes dos membros são números Têm uma propriedade length que dá o tamanho [email_address] var pessoa = [ 'Ze Manel', 29, 'Lisboa' ]; pessoa 0 1 2 Ze Manel 29 Lisboa
  • 47. JavaScript arrays Array Iterar num array Usa-se o for e não o for..in – for..in não especifica a ordem pela qual queremos percorrer o array [email_address] // usa-se o: for(var i=0; i < array.length; i++) { } // ou: for(var i = (array.length – 1); i >= 0; i–- ) { } // e não o: for(var i in array) { }
  • 48. JavaScript arrays Array Para criar um array: new Array() [] [email_address] var myArray = new Array(); var myArray = []; var myArray = new Array('Ze', 'Manel'); var myArray = ['Ze', 'Manel'];
  • 49. JavaScript arrays Array Adicionar Aceder [email_address] var myArray = []; // Adiciona myArray.push('Ze'); myArray[myArray.length] = 'Manel'; // Acede myArray[0] // Ze myArray[1] // Manel // e não myArray.0
  • 50. JavaScript arrays Array Apagar/remover [email_address] var myArray = ['a', 'b', 'c', 'd']; alert(myArray); // a, b, c, d alert(myArray[0]); // a myArray.splice(0, 1); alert(myArray); // b, c, d alert(myArray[0]); // b delete myArray[1]; alert(myArray); // b, undefined, d
  • 51. JavaScript arrays Array methods concat join push sort slice splice ... [email_address] var a = ['a', 'b']; var b = ['d', 'c']; a.concat(b); // ['a', 'b', 'd', 'c'] a.join('|'); // 'a|b|d|c' a.push('e'); // ['a','b','d','c','e'] a.sort(); // ['a','b','c','d','e'] a.slice(2,4); // ['c','d'] a.splice(0,1); // ['b','c','d','e']
  • 52. JavaScript functions Functions Funções são classes de objectos Funções podem ser: passadas retornadas guardadas (como outro valor qualquer) Funções também são herdadas de objectos Podem ser definidas onde quisermos, até mesmo dentro de outras funções Definem um scope :) [email_address] function myFunction() { ... } // mesmo que var myFunction = function(){ ... }
  • 53. JavaScript functions function Definição [email_address] function myFunction(x, y) { alert(x+' - '+y); } // ao invocar a função myFunction('a', 'b', 'c') // c é ignorado // a - b myFunction('a') // y será undefined // a - undefined
  • 54. JavaScript functions function Podem-se associar funções como valores de membros de objectos Passa a ser um método de um objecto [email_address] var obj = { myFunction: function() { }, otherFunction: function() { /* invocação dentro do objecto */ this.myFunction(); } } // invoca-se obj.myFunction(); var obj = {}; obj.myFunction = function() {}; obj.otherFunction = function(){ /* invocação dentro do objecto */ this.myFunction(); }; // invoca-se obj.myFunction();
  • 55. JavaScript functions function Invocar uma função [email_address] // como função: functionName(args); // como método dum objecto: objName.functionName(args); // como construtor: new functionName(args); // com o apply: functionName. apply (objName, args); // é o mesmo que: objName.method = functionName; objName.method(args);
  • 56. JavaScript functions this É o próprio objecto, mas depende da invocação [email_address] // como função: this = o objecto global // como método dum objecto: this = o objecto // como construtor: this = o novo objecto que é instanciado
  • 57. JavaScript functions arguments Quando uma função é invocada é criada uma variável interna ”arguments” É um objecto array like [email_address] function myF() { alert(arguments[0]); alert(arguments[1]); alert(arguments.length); alert(arguments.callee); } myF('a', 'b'); // a // b // 2 // myF(){...}
  • 58. JavaScript functions closures É criado com funções dentro de outras funções que têm acesso ao scope do pai Mesmo que a função pai tenha terminado, a função filha continua a correr e continua com acesso ao pai [email_address]
  • 59. JavaScript functions closures [email_address] function abre(id) { var elm = document.getElementById(id); var tamanho = 0; function vaiAbrindo() { if(tamanho < 100) { tamanho = tamanho + 5; elm.style.height = tamanho+'px'; setTimeout(vaiAbrindo, 100); } } setTimeout(vaiAbrindo, 100); }
  • 60. JavaScript functions closures [email_address] // ir a www.sapo.pt, escrever isto no Firebug e executar var s = 'border:1px solid red; height:0px; width:300px;'; document .body.innerHTML = '<div id=&quot;myid&quot; style=&quot;'+s+'&quot;></div>'; function abre(id) { var elm = document .getElementById(id); var tamanho = 0; function vaiAbrindo() { if(tamanho < 100) { tamanho = tamanho + 5; elm.style.height = tamanho+'px'; setTimeout(vaiAbrindo, 100); } } setTimeout(vaiAbrindo, 100); } abre('myid');
  • 61. JavaScript functions Podem-se estender ”Built-in types” Object.prototype Array.prototype Function.prototype String.prototype Number.prototype Boolean.prototype [email_address] String.prototype.trim = function() { return this.replace(/^\s+|\s+$|\n+$/g, ''); } // Passamos a ter: var str = ' abcd '; str.trim(); // 'abcd'
  • 62. JavaScript typeof() Diz-nos de que tipo é um valor [email_address] tipo Vs. typeof Vs. constructor object - object - Object function - function - Function array - object - Array number - number - Number string - string - String boolean - boolean - Boolean null - object - error... undefined - undefined - error...
  • 63. JavaScript eval() É o compilador/interpretador de JavaScript do browser Executa uma string e retorna o resultado Usar apenas para JSON [email_address] eval(&quot;a=5; b=4; alert(a+b);&quot;); // 9 function a() { alert('__a__'); } function b(aFunction) { eval(aFunction)(); } b('a'); // __a__
  • 64. JavaScript Global scope Num browser a variável global é ” window ” Tudo tem como pai/avô/bisavô o objecto ” window ” Evitar poluir o ”scope global” com variáveis No SAPO, por exemplo, temos uma única variável global, o ”SAPO” No SAPO deve-se evitar a variável ”SAPO” para não ter problemas com a LibSAPO.js ” Sapo”, ”sapo” também não, pois podem dar azo a confusões [email_address]
  • 65. JavaScript O global scope Quando queremos meter um bloco de código num site é boa prática criar um scope com uma função anónima que se executa a ela própria [email_address] (function(){ var options = { mode: 2 }; SAPO.Widget.ShareThis(options); })(); window.options; // undefined // senão seria: window.options; // {mode:2}
  • 66. JavaScript Outros Objectos Date() RegExp() ... [email_address] new Date(); new RegExp(”[a-z]”, ”ig”);
  • 67. JavaScript ainda há mais slides ? [email_address]
  • 68. JavaScript só para conseguir fazer 69 slides :) (ainda falta um...) [email_address]
  • 69. JavaScript slide 69 Cláudio Gamboa @email: [email_address] @xmpp: [email_address] @_: http://www.sapo.pt @blog: http://blog.pdvel.com/ @social: suskind [email_address]

Notas do Editor

  • #3: ECMAScript – European Community Manofactures Association
  • #4: Herança por prototype – objectos herda de outros objectos e não de classes Lambda – funções como classes de objectos