Baixe o app para aproveitar ainda mais
Prévia do material em texto
JavaScript Conteúdo 0.1 Prefácio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0.2 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0.2.1 História . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0.2.2 Portabilidade e usos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0.2.3 Suporte a JavaScript no navegador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0.2.4 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1 Conhecendo a linguagem 3 1.1 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.1 Definição da variável . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.2 Escopo da variável . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.3 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.4 Arranjos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1.5 Numéricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1.6 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1.7 Tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1.8 Conversão de Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.1.9 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.1 Mudança do conteúdo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.2 Comparação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.3 Aritméticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.4 Lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.5 A nível de bit (bitwise) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.6 Especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3 Controle de fluxo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.1 Bloco de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.2 Comando If . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.3 Comando While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.4 Comando Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3.5 Comando for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3.6 Comando label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3.7 Comando continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 i ii CONTEÚDO 1.3.8 Comando break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3.9 Comando throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3.10 Comando try . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4.1 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5 Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.1 Definição de Objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5.2 Propriedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.6 Expressões regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.6.1 Sintaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.6.2 Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.6.3 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.6.4 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2 Avançado 10 2.1 Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.1.1 Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.1.2 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.1.3 Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2 Funções e objetos predefinidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.1 Funções predefinidas segundo o padrão ECMA 262 . . . . . . . . . . . . . . . . . . . . . 11 2.2.2 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3 Anexo 14 3.1 Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.1.1 JavaScript Rotinas Diversas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2 Autores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2.1 Após a fusão feita em 16/12/2013 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2.2 Após a fusão feita em 16/12/2013 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.3 Ligações externas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.3.1 Ferramentas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.3.2 Outros recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.3.3 Tópicos relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4 Fontes, contribuidores e licenças de texto e imagem 20 4.1 Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.2 Imagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.3 Licença . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 0.2. INTRODUÇÃO 1 0.1 Prefácio alert(“Olá JavaScript!"); Este livro cobre as especificações técnicas da versão do padrão ECMAScript 262, da versão 5.1 em diante (Ecma- 262 Edition 5.1). Os autores deste livro esperam ter dado uma pequena contribuição para a disseminação desta linguagem script. Que esse livro possa tornar a vida mais fácil para progra- madores que necessitam tornar suas páginas mais inteli- gentes. 0.2 Introdução Muito se fala sobre JavaScript, porém existe muito pouca documentação em português desta linguagem de programação. É comum a confusão que se faz entre a linguagem Java e o JavaScript, embora sejam parecidas (são linguagens de propósito geral), são linguagens distintas, tem focos diferentes. Uma observação muito comum é notar que a linguagem Java é fortemente tipada, enquanto que JavaS- cript não. A JavaScript é uma linguagem pequena, leve e portável (está disponível em vários navegadores e plataformas). 0.2.1 História Brendan Eich, criador da linguagem JavaScript [1]. Hoje, desenvolvida com apoio de milhares de pessoas. De “Mocha” para “LiveScript”, de “LiveScript” para “Ja- vaScript” [1]. Mas por que?Bem, em 1995 a empresa Sun Microsystems trou- xera uma nova linguagem de programação denominada “Java”. Esta linguagem se tornou popular rapidamente. Devido a esta popularidade a empresa Netscape (criadora da linguagem JavaScript, e do atual Mozilla firefox) de- cidiu nomear sua linguagem script para World Wide Web (teia mundial) para algo semelhante, Java + Script → JavaScript, tudo para que pudesse “aparecer na mídia” [2]. Isso porque as duas linguagens compartilhavam sin- taxes semelhantes, embora a aplicação de recursos mais avançados (Orientação a Objetos) seja bem diferente en- tre estas duas linguagens. [1] A vontade de “acompanhar” a linguagem Java foi tão grande que em 1997 a Netscape decidiu criar um nave- gador inteiramente feito em Java, seu nome: Javagator. O projeto foi descontinuado, no entanto o que foi produ- zido acabou se tornando no interpretador feito em Java chamado rhino (tradução para rinoceronte). [3] Observações: Hoje a equipe que desenvolve o Mozilla Firefox faz parte da Mozilla Foundation, uma funda- ção sem fins lucrativos (fundação criada com a ajuda da antiga Netscape, antes da aquisição pela AOL [4]). Com o passar do tempo JavaScript se tornou um pa- drão desenvolvido pela ECMA (European Computer Manufactures Association) vide ECMA-262, também reconhecida pela ISO ISO-16262. [1] Embora haja um padrão, a implementação deste padrão não tem sido bem sucedida. Muitas empresas acabaram que criando seus próprios “padrões”, e várias vezes os desenvolvedores tiveram que contornar estes problemas através dos chamados hacks. 0.2.2 Portabilidade e usos Embora o JavaScript tenha sido uma linguagem focada na World Wide Web, principalmente para tornar as pá- ginas dinâmicas (DHTML), ela não se limita a este am- biente. JavaScript pode ser usado em diversos softwares como linguagem script, assim como Lua é a linguagem scripts em diversos softwares (por exemplo, no software MediaWiki, o software usado para disponibilizar todo conteúdo daWikipédia,Wikilivros, etc.). As implementações abaixo não dependem de um navega- dor. • Rhino — uma implementação da Mozilla Foun- dation de um interpretador de JavaScript feito em Java. • Nashorn — uma implementação da Oracle de um interpretador de JavaScript também em Java. • Node.js — uma plataforma para programação Ja- vaScript através do motor V8 (JavaScript). Para mais implementações veja a lista de motores que im- plementam o padrão ECMAScript. 0.2.3 Suporte a JavaScript no navegador Como este livro pretende se focar no uso mais comum dessa linguagem, o foco será no uso do JavaScript como linguagem script para web (propósito original). Para verificar se o JavaScript está habilitado no seu na- vegador (em inglês, browser), ou se ele suporta, copie e cole o código abaixo em uma arquivo HTML qualquer, e abra-o. <script language="javascript"> alert(“Olá!"); </script> O resultado esperado é uma pequena janela com a men- sagem "Olá!". Caso não apareça nada, ou apareça um erro, verifique as configurações do seu navegador. Alguns navegadores 2 CONTEÚDO deixam, por padrão, o JavaScript desabilitado, ou então nem mesmo suportam (implementam) a linguagem Ja- vaScript. 0.2.4 Referências [1] Wikipédia: https://pt.wikipedia.org/wiki/Javascript . [2] Mozillazine: http://kb.mozillazine.org/JavaScript_is_ not_Java . [3] Wikipédia: https://en.wikipedia.org/wiki/Rhino_ %28JavaScript_engine%29 . [4] Wikipédia: https://en.wikipedia.org/wiki/Netscape_ Communications_Corporation . Capítulo 1 Conhecendo a linguagem 1.1 Variáveis 1.1.1 Definição da variável As variáveis são representadas por nomes chamados de identificadores. Estes identificadores devem ser criados com certas regras: 1. Devem iniciar obrigatoriamente por letra ou pelo símbolo _ ou $. 2. A partir daí, além de letras, _ e $, podem conter algarismos (0 até 9). var nome = “Sérgio"; //Variável com escopo “local”. livro = “JavaScript"; //Escopo global. Uma variável ou matriz que não tenha sido inicializada possui o valor undefined (indefinido). Observe que o JavaScript diferencia letras maiúsculas de minúsculas (case-sensitive). Portanto, undefined e null devem ser es- critos sempre em letras minúsculas caso queira colocar estes nomes como identificadores. Se uma variável é declarada apenas com a instrução var (sem atribuir um valor), o seu conteúdo é undefined ou NaN (Not a Number, não é um número), caso esteja num contexto numérico. Exemplo: var x; x = x * 2; O resultado será NaN. Ou se for utilizado: x = x + “teste” Ocorrerá um erro de execução, pois x não tem valor de- finido. 1.1.2 Escopo da variável Analisando o escopo de variáveis em relação a progra- mação orientada a objetos, podemos afirmar que: caso a variável seja declarada fora do corpo de uma função, ela será considerada como pública (global), ou seja, po- derá ser alcançada por todas as funções. Caso ela seja declarada dentro de uma função, ela é considerada pri- vada, pois somente pode ser vista pelo código da própria função. Variável pública Exemplo: var x=10; function fx() { /* será possível utilizar o valor de x */ } function fy() { /* será possível utilizar o valor de x */ } Variável privada Exemplo: function fx() { var x = 5; /* será possível utilizar o valor de x */ } function fy() { /* x terá valor undefined, ou seja, não será visto por fy */ } 1.1.3 Constantes São variáveis declaradas com a palavra chave const. Não podem sofrer alteração de seu conteúdo e nem de sua de- claração no escopo da rotina. Exemplo: const fator = 1.34; const nome = “Sérgio"; Se tentar efetuar uma redeclaração, ocorrerá um erro de execução. Exemplo: const fator = 1.34; var fator = 22; Também ocorrerá erro se já tiver sido declarada outra va- riável ou função com o mesmo nome: 3 4 CAPÍTULO 1. CONHECENDO A LINGUAGEM function funcao() {} const funcao = “teste"; 1.1.4 Arranjos Arrays, que incluem vetores e matrizes, são variáveis que contêm vários elementos em seu interior. A declaração de um vetor é feita utilizando ou elementos delimitados por colchetes “[]” ou pelo objeto Array. Exemplo: var frutas = ["laranja”, “banana”, “pera"]; var nomes = new Array(“Sérgio”, “Eduardo”, “Rodrigues”); var valores = [1.34, 10, 50, 13e2]; Os elementos individuais são acessados colocando-se a posição do elemento entre colchetes após o nome do ve- tor. Lembre sempre que os vetores iniciam pelo ele- mento zero (0). Por exemplo, para acessar o primeiro elemento do vetor valores, escreveríamos valores[0]. Po- demos tanto ler quanto alterar elementos do vetor. Podem-se utilizar elementos vazios na declaração de um vetor, por exemplo: var frutas = ["laranja”,"banana”,,"pera”,,,"abacaxi"]; O resultado seria: • frutas[0] igual a “laranja” • frutas[1] igual a “banana” • frutas[2] igual a undefined • frutas[3] igual a “pera” • frutas[4] igual a undefined • frutas[5] igual a undefined • frutas[6] igual a “abacaxi” length é um atributo especial que possui a quantidade de elementos do vetor. Não é uma função; ou seja, tentar utilizar frutas.length() causará um erro. A maneira cor- reta de usar o atributo é frutas.length, sem os parênteses. Outra forma de gerar erro é tentar acessar elementos fora do range; no exemplo acima, frutas[7] faria o script abor- tar. Definição O objeto Array (matriz ou vetor) pode ser tanto criado implicitamente: var m = [1, 2, 3, 4]; Quanto explicitamente: var m = new Array(1, 2, 3, 4); Este objeto manipula uma coleção de outros objetos. Atributos O atributo length possui a quantidade de elementos que tem a matriz. Métodos O método concat retorna uma nova matriz, concatenando a primeira matriz (original) com os valores ou matrizes dados como argumentos. Exemplo: var m = ["sergio”, “eduardo"]; var n = m.concat(“rodrigues”);//n terá valor/["sergio”, “edu- ardo”, “rodrigues"] O método join junta todos os elementos da matriz em uma string, colocando um separador entre os itens. Exemplo: var m = ["sergio”, “eduardo”, “rodrigues"]; var n = m.join("+ "); //n terá valor/"sergio+ eduardo+ rodrigues” O método pop remove o último elemento da matriz, re- tornando o elemento removido. Exemplo: var m = ["sergio”, “eduardo”, “rodrigues"]; var n = m.pop(); //n terá valor/"rodrigues"; e ''m''/["sergio”, “eduardo"] O método push adiciona elementos ao final da matriz. O valor de retorno depende da versão do JavaScript/até a 1.2, o método retorna o último elemento adicionado; a partir da 1.3, retorna o novo tamanho da matriz. Exemplo: var m = ["sergio”, “eduardo"]; var n = m.push(“rodrigues”); //n terá valor/"rodrigues” (JS < 1.3) ou 3 (JS ≥ 1.3) e m/["sergio”, “eduardo”, “rodrigues"] O método reverse inverte a ordem dos elementos da ma- triz. Exemplo: var m = ["sergio”, “eduardo”, “rodrigues"]; var n = m.reverse(); //n e m terão valor/["rodrigues”, “eduardo”, “sergio"] O método shift remove o primeiro elemento da matriz, retornando o elemento removido. Exemplo: var m = ["sergio”, “eduardo”, “rodrigues"]; var n = 1.1. VARIÁVEIS 5 m.shift(); n terá valor/"sergio” m terá valor/["eduardo”, “rodrigues"] O método slice(início, fim), ou slice(início), retorna uma faixa da matriz, extraindo elementos a partir de início e até (mas não inclusive) fim. Se fim for omitido, extrai-se até o fim da matriz. fim também pode ser negativo; −1 indica o último elemento (que não será extraído, nesse caso). Exemplo: var m = ["a”, “b”, “c”, “d”, “e”, “f”, “g”, “h"]; var n = m.slice(0, 2); \\n terá valor/["a”, “b"] O método splice(início), splice(início, número), splice(início, número, itens a inserir...), adiciona e/ou remove faixas dentro de uma matriz. O primeiro argumento é o índice a partir do qual devem ser feitas as mudanças? remover número itens e adicionar os itens a inserir. Exemplo: var m = ["a”, “b”, “c”, “d”, “e”, “f”, “g”, “h"]; var n = m.splice(0, 2); //n terá valor/["a”, “b"] //m terá valor/["c”, “d”, “e”, “f”, “g”, “h"] O método sort, sort (função_de_comparação(a, b)), or- dena a matriz, opcionalmente com base em uma função de comparação personalizada. Exemplo: var m = ["sergio”,"eduardo”,"rodrigues"]; var n = m.sort() //n terá valor/["eduardo”,"rodrigues”,"sergio"] No caso de passar a função de comparação, ela deve re- tornar um valor menor que zero se a < b (a deve ser clas- sificado antes de b), 0 se a = b e maior que zero se a > b. O método unshift(item, ...) adiciona um ou mais elemen- tos ao inicio da matriz. Exemplo: var m = ["sergio”, “eduardo”, “rodrigues"]; m.unshift(“sr”); //m terá valor/["sr”, “sergio”, “edu- ardo”, “rodrigues"] Matrizes Uma matriz é um vetor de vetores, ou seja, declara-se um vetor, cujos elementos são vetores. Exemplo: var matriz = [["adao”, “eva"], ["caim”, “abel"]] No caso acima, o elemento “caim” é o elemento [0] do vetor [1] da matriz, ou seja, “caim” é acessado via ma- triz[1][0]. É possível definir uma matriz de forma parcial Exemplo: var genesis = [["adao”, “eva"], ["caim”, “abel”, “sete"]] Neste caso, os elementos necessários para completar a matriz são preenchidos com undefined (no exemplo acima, genesis[0][2]). 1.1.5 Numéricas Existem duas categorias de números, os de notação de ponto flutuante e os inteiros. Os primeiros representam os valores fracionados, com valores decimais. Podem ser expressos de várias maneiras: 1e3 //é igual a 1 x 10<sup>3</sup>, que é 1000 −3.28e12 //é igual a −3.28 x 10<sup>12</sup>, que é −3280000000000 1e-12 //é igual a 1 x 10<sup>−12</sup>, que é 0.000000000001 Valores inteiros podem ser representados em base 10 (de- cimal), 16 (hexadecimal) ou 8 (octal). Exemplos: 012 //é igual a 10 decimal. Sendo iniciado com 0, é assumido que o número é octal. 0x12 //é igual a 18 decimal. Números iniciados com 0x são assumidos como numero hexadecimais. 12 //representa 12 decimal. 1.1.6 Strings São seqüências de caracteres delimitadas por (") aspas ou (') apóstrofe. Exemplos: 'Sérgio Eduardo' “um texto qualquer” “várias li- nhas:\nSegunda Linha\tMesma linha com tabulação” Ao inicializar uma string pode-se utilizar caracteres es- peciais, este tem uma barra inversa(\) para indicar que seu significado é especial, veja a seguinte tabela Atributos Métodos 1.1.7 Tipos de dados O JavaScript possui poucos tipos de dados. Abaixo eles são apresentados. 6 CAPÍTULO 1. CONHECENDO A LINGUAGEM Numéricos Este tipo de dado armazena valores, tanto valores inteiros como ponto flutuante. Exemplo: 1 84 2e10 3.141516 0.000001 Os valores numericos podem fazer parte de operações aritmética, como a soma, subtração, multiplicação e di- visão. Valores numéricos também podem fazer parte de opera- ções aritiméticas de bits. Como por exemplo >> rota- ção de bits para direita, << rotação de bits para esquerda, >>> rotação de bits a direita sem levar em conta o sinal, ^ OU exclusivo (mesmo que XOR), (&) operação E binária (mesmo que AND), (|) operação OU binária (mesmo que OR), (~) negação binária (mesmo que NOT). Existem várias funções para manipulação de valores nu- méricos, como funções trigonométricas, funções de arre- dondamento e exponenciação, funções de transformação de tipos, etc. Existem alguns valores numéricos especiais, são eles : NaN é a abreviação de (Not a Number), igual a “não é um Número”, ele é o resultado geralmente de operações inválidas com números. Como por exemplo, o resultado da operação 0 / 0 , irá resultar noNaN. Ele também é uma constante, que pode ser atribuida a uma variável, como veremos mais adiante. Infinity representa um valor infinito, podendo ser tanto positivo quanto negativo. Todas as operações com valo- res infinitos resultarão num valor infinito, exceto divisão e subtração que resultará no NaN. Lógicos Os valores lógicos podem assumir dois valo- res: true (verdadeiro) e false (falso). Strings São cadeias de caracteres, o maior número que uma String pode conter depende do navegador em uso. Valores Strings são valores delimitados por apóstrofo ' ou por aspas " . Exemplo: “texto"// ou 'texto' Uma barra inversa permite a inserção de caracteres espe- ciais. Exemplo: "\b” //Representa o backspace (caracter ascii 8) "\t” //Tabulação (caracter ascii 9) "\r” //Retorno de carro (caracter ascii 13) "\n” //Nova linha (caracter ascii 10) "\v” //Tabulação vertical (caracter ascii 11) "\uNNNN” //Caracter unicode (NNNN representa um valor he- xadecimal de 0000 a FFFF) "\xNN” //Caracter ascii (NN representa um valor hexadecimal de 00 a FF) "\'" //Apóstrofo "\"" //Aspas "\\" //Barra inversa O null O null é um valor especial, representa um ob- jeto nulo, não deve ser confundido com uma variável não inicializada, pois o valor null existe. Portanto uma variável com o conteúdo null existe emme- mória, referenciando este objeto especial. O undefined O valor undefined significa que a variá- vel não foi instanciada, inicialmente todas as variáveis se encontram neste estado. Exercícios Tente prever o que o script abaixo irá mostrar antes de copiar e colar seu conteúdo em um arquivo HTML e exibi-lo no browser. Adiantando um pouco, o que do- cument.writeln(x, " "); faz é exibir a variável x , seguida de uma quebra de linha. Esta função será detalhada mais adiante, mas para propósitos didáticos é importante saber como mostrar o que está sendo calculado. document.writeln(1 << 3, "<br />"); docu- ment.writeln(0/0, "<br />"); document.writeln(5/2, "<br />"); /* esta é bem maliciosa. O resultado é inteiro ou ponto flutuante? */ document.writeln(“Hello, world!", "<br />"); document.writeln(“Hello, world!<br />"); 1.1.8 Conversão de Tipos Atribuindo valores Diferente da maioria das lingua- gens o JavaScript define as variáveis dinamicamente, por- tanto ao atribuiruma variável ele escolhe o tipo conforme o valor passado para a variável, não sendo necessário es- pecificar o mesmo. var numero = 1; //Numerica inteira. var texto = “Sérgio Eduardo Rodrigues"; //String. var valor = 123.45; //Nu- merica com ponto flutuante. var ativo = true; //Booleana. var nascimento = new Date(1969,1,4); //Objeto date. Esta forma de tratar variáveis tem o curioso nome, em inglês, de “duck typing” [1] . Convertendo Uma variável pode ser atribuída para ou- tro tipo, ou utilizando uma função de conversão ou então fazendo operações aritméticas. Como por exemplo, quando atribuímos ao numero o va- lor 1, ele se encontra no tipo numérico inteiro, se o divi- dirmos por 2 ele irá para o tipo numérico ponto flutuante: numero = 1; // inteiro 1 . numero = numero / 2; // Vai para flutuante 0.5 . numero = " " + numero; // ele é 1.3. CONTROLE DE FLUXO 7 convertido para string, pois está sendo somado à outra string. numero = parseFloat(numero); // Ele irá resultar no número 0.5 . numero = parseInt(numero); // Vai para o inteiro 0. 1.1.9 Referências [1] http://en.wikipedia.org/wiki/Duck_typing Duck typing, na Wikipedia em inglês 1.2 Operadores 1.2.1 Mudança do conteúdo 1.2.2 Comparação 1.2.3 Aritméticos 1.2.4 Lógicos 1.2.5 A nível de bit (bitwise) 1.2.6 Especiais Short Circuit Operações lógicas utilizam short circuit da seguinte forma: true || qualquer coisa = true false && qualquer coisa = false Assim é possível por exemplo fazer a seguinte operador: if (a !== 0 && 1/a > 0.5) { //... } Assim evita erros de divisão por zero. 1.3 Controle de fluxo Controlando o que e quando é executado um comando, faz parte de todas as linguagens, e o JavaScript não é di- ferente. Existem vários comandos, que por isto são tratados como palavras reservadas e portanto não devem ser utilizados como identificadores de variáveis ou constantes. 1.3.1 Bloco de comandos No JavaScript, o bloco de comandos é uma estrutura para agrupar outros comandos. O bloco de comando começa pelo abre chave { e finaliza com o fecha chave }, o ultimo elemento não necessária- mente necessita de finalizar com ponto e virgula ;, mas se terminar não terá problemas, este ultimo ponto e virgula é opcional. { comando; comando; ... comando } Ou então: { comando; comando; ... comando; } 1.3.2 Comando If Talvez um dos comandos mais utilizados em todas as lin- guagens de programação, o if é um comando utilizado para tomar a decisão de executar o próximo comando ba- seado numa expressão lógica, se esta expressão for verda- deira o próximo comando é executado, caso contrário ele é ignorado. Por exemplo, se for necessário dar um alerta ao usuário, conforme a hora, podemos fazer o seguinte: var hora = new Date().getHours(); if (hora < 12) alert(“bom dia”); if (hora >= 12 && hora < 18) alert(“boa tarde”); if (hora >= 18) alert(“boa noite”); Note que as três comparações serão feitas, independente da execução, isto é uma perda de tempo, pois se é de dia não pode ser tarde, neste caso anexamos a estrutura do if o comando else que executa o comando a seguir caso o resultado da expressão lógica seja false, ficando o nosso código assim. var hora = new Date().getHours(); if (hora < 12) alert(“bom dia”); else if (hora >= 12 && hora < 18) alert(“boa tarde”); else alert(“boa noite”); Para tornar mais legível podemos escrever da seguinte forma: var hora = new Date().getHours(); if (hora < 12) { alert(“bom dia”); } else { if (hora >= 12 && hora < 18) { alert(“boa tarde”); } else { alert(“boa noite”); } } Assim torna mais legível a o comando executado, sem falar que usando blocos de comandos podemos agrupar mais de um comando. 1.3.3 Comando While Executa bloco enquanto condição resultar em verdadeiro. while (condição) { bloco; } Igual ao anterior, porém o bloco é executado pelo menos uma vez, mesmo que a condição seja falsa. 8 CAPÍTULO 1. CONHECENDO A LINGUAGEM do { bloco; } while (condição); 1.3.4 Comando Switch Se o conteúdo da variável for igual a constante1 ou cons- tante2 será executado o comando1; se for igual a cons- tante3 será executado o comando2; caso contrário será executado o comando3; note que o comando break força o fluxo sair fora do comando switch. switch(variável) { case constante1: case constante2: comando1; break; case constante3: comando2; break; default: comando3; } 1.3.5 Comando for Efetua uma inicialização em seguida executa o comando enquanto a condição for verdadeira, após a execução do comando executa a expressão de incremento, ex: /* * for(inicialização; condição; incremento) * comando; */ for (var i = 0; i < 3; i++) alert(i); //É equivalente a: var i = 0; while (i < 3) { alert(i); i++; } 1.3.6 Comando label O label permite que a indicação de uma posição que pode ser utilizado com continue e break para salto dentro de um loop (laço). label: 1.3.7 Comando continue Salta para loop ou para loop que está após label indicado. continue; continue label; 1.3.8 Comando break Sai fora do loop corrente ou do loop que esta após label informado. break; break label; 1.3.9 Comando throw Lança exceção. throw expressão; 1.3.10 Comando try Captura qualquer erro que um comando lance e captura exceções conforme expressão. Abaixo o comando2 será executado caso comando1 lance uma exceção. try { comando1; } catch(e) { comando2; } Abaixo o comando3 será executado caso a exceção lan- çada pelo comando1 seja igual a expressão1, se for igual a expressão2 o comando4 será executado, se for lançado uma exceção que não seja igual nem a expressão1 e nem a expressão2 será executado o comando2; try { comando1; } catch(e if e == expressão1) { co- mando3; } catch(e if e == expressão2) { comando4; } catch(e) { comando2; } Executa comando1 se este lançar uma exceção executa comando2 em seguida comando3, se comando1 não lan- çar nenhuma exceção executa comando3; try { comando1; } catch(e) { comando2; } finally { comando3; } Exemplo: var x = [["adao"], ["eva"], ["caim"], ["abel"]]; for (i = 0; i < 100; i++) { try { document.writeln(“x[", i, "][0] = ", x[i][0], "<br />"); } catch (e) { document.writeln(e, "<br />"); break; } } Observações: No exemplo acima, caso x fosse um vetor (Array de uma dimensão), não haveria erro, mas o loop continuaria, apresentando x[4] = undefined, x[5] = undefined, e assim por diante. 1.4 Funções As funções são declaradas pela palavra reservada func- tion (palavra-chave, keyword), seguido: 1. Do Identificador (assim o nome de uma variável); 2. da lista de argumentos (list of arguments) — deli- mitados por parênteses e separados por vírgula: (/* argumentos */); 3. das instruções (bloco de instruções, ou código; corpo da função), delimitado por chaves: {/* instruções */}. Referências: [1] . Exemplo: function identificador (argumento1, argumento2, argu- mento3 /*, ... */) { //Instruções; corpo da função. } 1.6. EXPRESSÕES REGULARES 9 Uma sintaxe alternativa é demonstrada abaixo. var identificador = new function(argumento1, argu- mento2, argumento3 /*, ... */) { //Instruções; corpo da função. }; 1.4.1 Referências [1] MDN: https://developer.mozilla.org/en-US/docs/Web/ JavaScript/Guide/Functions — Funções. 1.5 Objetos 1.5.1 Definição de Objeto Podem ser declarados com propriedades e valores deli- mitados por chaves {}, ou através de funções. Exemplo: var pessoa = { nome: “Sérgio”, altura: 1.72, nascimento: new Date(1969,1,4) }; Ou então: function objetoPessoa() { this.nome = “Sérgio"; this.altura = 1.72; this.nascimento = new Date(1969,1,4) } var pessoa = new objetoPessoa(); Observações: O parâmetro de mês na criação do objeto Date inicia com 0; ou seja, 1 significa Fevereiro. Para acessar qualquer atributo do objeto, basta informar o nome do objeto seguido por seu atributo após um ponto (.). Exemplo: alert(pessoa.nome); alert(pessoa.altura); alert(pessoa.nascimento);Também podem-se atribuir métodos a objetos, da se- guinte forma: function mostrePessoa() { alert(this.nome + "\n” + this.altura + "\n” + this.nascimento); } var pes- soa = { nome: “Sergio”, altura: 1.72, nascimento: new Date(1969,1,4), mostre: mostrePessoa }; pes- soa.mostre(); pessoa.nome = “eduardo"; pessoa.altura = 1.78; pessoa.nascimento = new Date(1975, 6, 25); pessoa.mostre(); Métodos também podem ser atribuídos diretamente no objeto, sem a necessidade de especificar primeiro a fun- ção. var pessoa = { nome: “Sergio”, altura: 1.72, nascimento: new Date(1969,1,4), mostre: function(){ alert(this.nome + "\n” + this.altura + "\n” + this.nascimento); } }; pes- soa.mostre(); pessoa.nome = “eduardo"; pessoa.altura = 1.78; pessoa.nascimento = new Date(1975, 6, 25); pessoa.mostre(); 1.5.2 Propriedades Pode-se acrescentar métodos especiais para tratamento das operações de get e de set, exemplo: var conta={ valor:0, set deposito(x) { this.valor += x; }, set saque(x) { this.valor -= x; }, get provisao() { return this.valor/4; } }; conta.deposito = 100; conta.saque = 50; alert(“provisão = " + conta.provisao + "\n saldo = " + conta.valor); 1.6 Expressões regulares Expressões regulares são padrões de cadeias de caracteres (strings) geralmente usadas para selecionar ou verificar a presença de um determinado texto. [1] 1.6.1 Sintaxe var er = new RegExp(expressão, opções); //Instanciando um objeto do tipo RegExp. var er = /expressão lite- ral/opções; //Usando uma expressão literal. Opções As flags (tradução para “um sinalizador”, bandeira) abaixo funcionam como variáveis booleanas (a presença delas conta como valor verdadeiro). 1.6.2 Atributos [2] 1.6.3 Métodos 1.6.4 Referências [1] MDN: https://developer.mozilla.org/pt-BR/docs/ JavaScript/Guide/Regular_Expressions . [2] MDN: https://developer.mozilla.org/en-US/docs/Web/ JavaScript/Reference/Global_Objects/RegExp . Capítulo 2 Avançado 2.1 Ajax Com o advento do AJAX, este objeto se torna cada vez mais importante. Ele, infelizmente, não é padronizado, e portanto, até que saia uma resolução, devemos sempre fazer checagem para criação deste objeto, a seguir apre- sento a sua estrutura, e em seguida uma pequena rotina para criação e manipulação do mesmo. 2.1.1 Atributos 2.1.2 Métodos 2.1.3 Eventos Exemplo de Uso Salve este codigo como request.js var RequestObject; function initRe- quest(newRequestFunc, noBody) { var _newRe- quest = newRequestFunc; var _noBody = noBody; var _id = 0; return function() { this.newRequest = _newRequest; this.concatTimer = function(url, id) { return url + (url.indexOf("?") < 0 ? "?" /"&")+ “requestTime=" + new Date().getTime() + "&requestId=" + id; } this.loadText = function(url, method) { var req = _newRequest(); req.open(method || “GET”, this.concatTimer(url, _id++), false); if (_noBody) req.send(); else req.send(null); return req.responseText; } this.splitLines = function(text) { try { return text.split(/\r?\n|\r/); } catch(e) { re- turn []; } } this.loadLines = function(url, method) { return this.splitLines(this.loadText(url, method || “GET”)); } this.loadXML = function(url, method) { var req = _newRequest(); req.open(method || “GET”, this.concatTimer(url, _id++), false); if (_noBody) req.send(); else req.send(null); return req.responseXML; } this.bind = function(object) { var url = object['url']; if (typeof url == 'undefined') throw “necess?rio URL para fazer bind"; var id = _id++; var req = _newRequest(); var method = object['method'] || “GET"; var headers = object['header']; var body = object['body']; var user = object['username']; var pass = object['password']; var onload = object['onload']; var onerror = ob- ject['onerror']; var onprocess = object['onprocess’]; var onstatechange = object['onstatechange']; req.onreadystatechange=function() { if (onstatechange) onstatechange(req, id); switch(req.readyState) { case 0/// UNINITIALIZED open() não foi chamado ainda break; case 1/// LOADING send() não foi chamado ainda case 2/// LOADED send() foi chamado, disponível getResponseHeader e status case 3/// INTERACTIVE carregando, responseText tem dados parciais if (onpro- cess) onprocess(req, id); break; case 4/// COMPLETED, todas as operações foram concluidas if (onprocess) onprocess(req, id); if (req.status == 0 || req.status == 200) { if (onload) onload(req, id); } else { if (onerror) onerror(req, id, req.statusText); } break; } } if (user) req.open(method, this.concatTimer(url, id), true, user, password); else req.open(method, this.concatTimer(url, id)); req.setRequestHeader('requestid', id); for(var header in headers) { req.setRequestHeader(header, headers[header]); } try { if (body && _noBody) { req.send(); } else { req.send(body); } } catch(e) { if (onerror) { onerror(req, id, e); } } } } } if (window.ActiveXObject) { var objectNames = [ “Msxml2.XMLHTTP.5.0”, “Msxml2.XMLHTTP.4.0”, “MSXML2.XMLHTTP.3.0”, “MSXML2.XMLHTTP”, “Microsoft.XMLHTTP” ]; for(var i=0; i < object- Names.length; i++) { try { var requestName = ob- jectNames[i]; new ActiveXObject(requestName); RequestObject = initRequest(function() { return new ActiveXObject(requestName); }, true); } catch(e) { } } } if (! RequestObject && window.XMLHttpRequest) { try { new XMLHttpRequest(); RequestObject = ini- tRequest(function() { return new XMLHttpRequest(); }, false); } catch(e) { } } if (! RequestObject) { alert(“Seu browser não esta preparado para o ajax”); } Inclua na página, o seguinte comando para incluir este arquivo : <script type="text/javascript” src="request.js"></script> Em seguida, você pode utilizar o código, como por exem- plo, carregando um texto de forma síncrona / 10 2.2. FUNÇÕES E OBJETOS PREDEFINIDOS 11 var req = new RequestObject(); alert(req.loadText(“textoqualer.txt”)); Podemos também carregar numamatriz e processar linha a linha: var req = new RequestObject(); var matriz = req.loadLines(“textoqualer.txt”); for(var i=0; i < matriz.length; i++) { alert(i + ":" + matriz[i]); } Também é possível carregar de forma assincrona : var req = new RequestObject(); req.bind({ url:"textoqualquer.txt”, onload:function(rq, id) { alert(rq.responseText); } }); É possível também verificar se ocorreu algum erro, da seguinte forma : var req = new RequestObject(); req.bind({ url:"textoqualquer.txt”, onload:function(rq, id) { alert(rq.responseText); }, onerror:function(rq, id, msg) { alert('erro = ' + msg); } }); 2.2 Funções e objetos predefinidos Existem uma série de objetos que já estão definidos para o desenvolvedor, este objetos são largamente utilizados na linguagem, e são fundamentais para interação com os sistemas. 2.2.1 Funções predefinidas segundo o pa- drão ECMA 262 Versão consultada: 5.1 . • Array.prototype.concat • Array.prototype.constructor • Array.prototype.every • Array.prototype.filter • Array.prototype.forEach • Array.prototype.indexOf • Array.prototype.join • Array.prototype.lastIndexOf • Array.prototype.map • Array.prototype.pop • Array.prototype.push • Array.prototype.reduce • Array.prototype.reduceRight • Array.prototype.reverse • Array.prototype.shift • Array.prototype.slice • Array.prototype.some • Array.prototype.sort • Array.prototype.splice • Array.prototype.toLocaleString • Array.prototype.toString • Array.prototype.unshift • Boolean.prototype.constructor • Boolean.prototype.toString • Boolean.prototype.valueOf • Date.prototype.constructor • Date.prototype.getDate • Date.prototype.getDay • Date.prototype.getFullYear • Date.prototype.getHours • Date.prototype.getMilliseconds • Date.prototype.getMinutes • Date.prototype.getMonth • Date.prototype.getSeconds • Date.prototype.getTime • Date.prototype.getTimezoneOffset • Date.prototype.getUTCDate • Date.prototype.getUTCDay • Date.prototype.getUTCFullYear • Date.prototype.getUTCHours • Date.prototype.getUTCMilliseconds • Date.prototype.getUTCMinutes• Date.prototype.getUTCMonth • Date.prototype.getUTCSeconds • Date.prototype.getYear • Date.prototype.setDate • Date.prototype.setFullYear • Date.prototype.setHours 12 CAPÍTULO 2. AVANÇADO • Date.prototype.setMilliseconds • Date.prototype.setMinutes • Date.prototype.setMonth • Date.prototype.setSeconds • Date.prototype.setTime • Date.prototype.setUTCDate • Date.prototype.setUTCFullYear • Date.prototype.setUTCHours • Date.prototype.setUTCMilliseconds • Date.prototype.setUTCMinutes • Date.prototype.setUTCMonth • Date.prototype.setUTCSeconds • Date.prototype.setYear • Date.prototype.toDateString • Date.prototype.toGMTString • Date.prototype.toISOString • Date.prototype.toJSON • Date.prototype.toLocaleDateString • Date.prototype.toLocaleString • Date.prototype.toLocaleTimeString • Date.prototype.toString • Date.prototype.toTimeString • Date.prototype.toUTCString • Date.prototype.valueOf • Error.prototype.constructor • Error.prototype.message • Error.prototype.name • Error.prototype.toString • Function.prototype.apply • Function.prototype.bind • Function.prototype.call • Function.prototype.constructor • Function.prototype.toString • NativeError.prototype.constructor • NativeError.prototype.message • NativeError.prototype.name • Number.prototype.constructor • Number.prototype.toExponential • Number.prototype.toFixed • Number.prototype.toLocaleString • Number.prototype.toPrecision • Number.prototype.toString • Number.prototype.valueOf • Object.prototype.constructor • Object.prototype.hasOwnProperty • Object.prototype.isPrototypeOf • Object.prototype.propertyIsEnumerable • Object.prototype.toLocaleString • Object.prototype.toString • Object.prototype.valueOf • RegExp.prototype.constructor • RegExp.prototype.exec • RegExp.prototype.test • RegExp.prototype.toString • String.prototype.charAt • String.prototype.charCodeAt • String.prototype.concat • String.prototype.constructor • String.prototype.indexOf • String.prototype.lastIndexOf • String.prototype.localeCompare • String.prototype.match • String.prototype.replace • String.prototype.search • String.prototype.slice • String.prototype.split • String.prototype.substr • String.prototype.substring • String.prototype.toLocaleLowerCase • String.prototype.toLocaleUpperCase • String.prototype.toLowerCase • String.prototype.toString 2.2. FUNÇÕES E OBJETOS PREDEFINIDOS 13 • String.prototype.toUpperCase • String.prototype.trim • String.prototype.valueOf • (Objeto global) eval (x) • (Objeto global) parseInt (string , radix) • (Objeto global) parseFloat (string) • (Objeto global) isNaN (number) • (Objeto global) isFinite (number) Matemática Atributos Métodos Data e hora 2.2.2 Referências Capítulo 3 Anexo 3.1 Dicas 3.1.1 JavaScript Rotinas Diversas Retirados do Editor de JavaScript “1st JavaScript Editor” Browser code name <script language='JavaScript' type='text/JavaScript'> //Made by 1st JavaScript Editor //http: //www.yaldex.com document.write('<p align=\'center\'><B>'+navigator.appCodeName+'</B></P>'); </script> Browser language document.write("<p align='center'><b>"); if (docu- ment.all){document.write(navigator.browserLanguage);} else{document.write(navigator.language)} docu- ment.write("</b></p>"); Browser Name document.write('<p align=\'center\'><B>'+navigator.appName+'</B><P>'); Browser versão document.write('<p align=\'center\'><B>'+navigator.appVersion+'</B></P>'); Color Depth function twentieth() {return (screen.colorDepth);}document.write('<b>Your screen is currently using ' + twentieth() + 'bit colour.</b>'); Screen Resolução var fifteenth=0; var sixteenth=0; if (self.screen) { sixteenth = screen.width;fifteenth = screen.height} else if (self.java) { var jkit = java.awt.Toolkit.getDefaultToolkit(); var scr- size = jkit.getScreenSize();sixteenth = scr- size.width;fifteenth = scrsize.height; } docu- ment.writeln('<p align=\'center\'>'); if (sixteenth > 0 && fifteenth > 0) {document.writeln('Screen Resolution: ',sixteenth,' x ',fifteenth); } else {document.writeln('Your screen resolution cannot be determined');} docu- ment.writeln('</p>'); Adicionar aos favoritos <a href="javascript:window.external. AddFavorite(document.location,'');">Add to Favo- rites!</a> Botões coloridos <head> <style type="text/css"> .initial2{ font-weight:bold; background-color:red; font- family: Verdana, Arial, Helvetica, sans-serif; } </style> <script type="text/javascript"> var fifteenth=""; function sixteenth(seventeenth, nineteenth){var twentieth=window.event? event.srcElement: seventeenth.target; if (twenti- eth.tagName=="INPUT"&&twentieth.type=="button”)twentieth.style.backgroundColor=nineteenth;} function third2(fourth2){ if (fifte- enth=="")window.location=fourth2; else if (fif- teenth=="_new”)window.open(fourth2); else pa- rent[fifteenth].location=fourth2;} </script> <ti- tle></title> </head> <body> <form onMou- seover="sixteenth(event, 'yellow')" onMouse- out="sixteenth(event, 'red')"> <input type="button” value="Get More Products!" class="initial2” onClick="third2('http://yaldex.com')"> </form> </body> Link para e-mail <a href ='mailto:support@yaldex.com?subject=enter subject here &cc=another@youremail.com'>Email Me!</a> Tornar sua Página Inicial <a href="#" onClick="this.style.behavior='url(#default#homepage)'; this.setHomePage(document.location);">Click here to make this page your starting page.</a> Link Descrição on MouseOver function fifteenth(sixteenth, sevente- enth) {var eighteenth,nineteenth,twentieth; if(!seventeenth) seventeenth=document; 14 3.1. DICAS 15 if((eighteenth=sixteenth.indexOf('?'))>0&&parent.frames.length) { seventeenth=parent.frames[sixteenth.substring(eighteenth+1)].document; sixteenth=sixteenth.substring(0,eighteenth); } if(!(twentieth=seventeenth[sixteenth])&&seventeenth.all) twentieth=seventeenth.all[sixteenth]; for (ninete- enth=0;!twentieth&&nineteenth<seventeenth.forms.length;nineteenth++) twentieth=seventeenth.forms[nineteenth][sixteenth]; for(nineteenth=0;!twentieth&&seventeenth.layers&&nineteenth<seventeenth.layers.length; nineteenth++) twenti- eth=fifteenth(sixteenth,seventeenth.layers[nineteenth].document); if(!twentieth && seventeenth.getElementById) twentieth=seventeenth.getElementById(sixteenth); return twentieth;} function first2(second2,twentieth,third2,fourth2) { var fifth2 = fifteenth(second2); if (fifth2 && (third2.indexOf('style.')==−1 || fifth2.style)){ if (fourth2 == true || fourth2 == false)eval('fifth2.'+third2+'='+fourth2); else eval(“fifth2."+third2+"='"+fourth2+"'");}} Botão Imprimir <form> <input type=button value='Imprimir' onClick='javascript:window.print()'> </form> Reload Página <a href='JavaScript:window.location.reload()'>Click to Reload!</a> Relógio com Barras Coloridas <head> <style type='text/css’> TH {text-align: right\protect\char"007D\relax;SPAN {vertical-align: bottom}; </style> <script language='JavaScript'> var fifteenth = new Date();var sixteenth = 6;var seventeenth = 3; function eighteenth() { with(document.all) { ninete- enth.style.setExpression('width','fifteenth.getHours() * sixteenth * seventeenth','jscript'); twenti- eth.setExpression('innerHTML','fifteenth.getHours()','jscript'); first2.style.setExpression('width','fifteenth.getMinutes() * sixteenth','jscript'); se- cond2.setExpression('innerHTML','fifteenth.getMinutes()','jscript'); third2.style.setExpression('width','fifteenth.getSeconds() * sixteenth','jscript'); fourth2.setExpression('innerHTML','fifteenth.getSeconds()','jscript') } fifth2(); } function fifth2() { fifteenth = new Date(); document.recalc(); setTimeout('fifth2()',1000); } window.onload=eighteenth; </script> <title></title> </head> <body> <TABLE BORDER=0><TR> <TH>Hours:</TH> <TD> <SPAN ID='nineteenth' STYLE='background-color:red'></SPAN> <SPAN ID='twentieth'></SPAN></TD></TR><TR> <TH>Minutes:</TH> <TD> <SPAN ID='first2'STYLE='background-color:yellow'></SPAN> <SPAN ID='second2'></SPAN></TD></TR><TR> <TH>Seconds:</TH> <TD> <SPAN ID='third2' STYLE='background- color:#00FF40'></SPAN> <SPAN ID='fourth2'></SPAN></TD></TR></TABLE> </body> Data Atual var data=new Date(); var ano=data.getFullYear(); var dia=data.getDay(); var mes=data.getMonth()+1; if (mes<10)mes='0'+mes;var hoje=data.getDate(); if (hoje<10)hoje='0'+hoje; docu- ment.write('<code>'+hoje+'/'+mes+'/'+ano+'</code>'); Calendário do ano function fifteenth(sixteenth) {document.write('<TD ALIGN=center WIDTH=36>'+sixteenth+'</TD>'); }function seventeenth(eighteenth,nineteenth) { if ((twentieth == eighteenth) && (first2 == nineteenth))document.write('<FONT CO- LOR=\'#FF000f\'>'); }function second2(third2) {this.length=third2; for (var fourth2 = 1; fourth2 <= third2; fourth2++)this[fourth2] = 0; return this; }function fifth2(sixth2,fifteenth3,nineteenth) {eighteenth=1; document.write('<center><TABLE BORDER=3 CELLSPACING=3 CELLPAD- DING=%3><TR>'); document.write('<TD COLS- PAN=7 ALIGN=center><B>'+sixth2+' '+six- teenth3+'</B><TR>'); fifteenth('Sun'); fifte- enth('Mon'); fifteenth('Tue'); fifteenth('Wed'); fif- teenth('Thu'); fifteenth('Fri'); fifteenth('Sat'); do- cument.write('</TR><TR>'); for (var fourth2=1; fourth2<seventeenth3; fourth2++) {docu- ment.write('<TD>'); }for (var fourth2=seventeenth3; fourth2<8; fourth2++) {document.write('<TD ALIGN=center>'); seventeenth(eighteenth,nineteenth); document.write(eighteenth+"</TD><FONT COLOR='#000000'>"); eighteenth++; }docu- ment.write('<TR>'); while (eighteenth <= fifte- enth3) {for (var fourth2=1; fourth2<=7 && eighte- enth<=fifteenth3; fourth2++) {document.write('<TD ALIGN=center>'); seventeenth(eighteenth,nineteenth); document.write(eighteenth+"</TD><FONT COLOR='#000000'>"); eighteenth++; }document.write('</TR><TR>'); }docu- ment.write('</TR></TABLE></center><BR>'); seventeenth3 = fourth2; }eighteenth3=new se- cond2(12); eighteenth3[1]='January'; eighte- enth3[2]='February'; eighteenth3[3]='March'; eigh- teenth3[4]='April'; eighteenth3[5]='May'; eigh- teenth3[6]='June'; eighteenth3[7]='July'; eighte- enth3[8]='August'; eighteenth3[9]='September'; eigh- teenth3[10]='October'; eighteenth3[11]='November'; eighteenth3[12]='December'; nineteenth3 = new se- cond2(12); nineteenth3[1]=31; nineteenth3[2]=28; nineteenth3[3]=31; nineteenth3[4]=30; ninete- enth3[5]=31; nineteenth3[6]=30; nineteenth3[7]=31; nineteenth3[8]=31; nineteenth3[9]=30; nine- teenth3[10]=31; nineteenth3[11]=30; ninete- enth3[12]=31; twentieth3 = new Date(); twentieth = twentieth3.getDate(); first2 = twentieth3.getMonth()+1; 16 CAPÍTULO 3. ANEXO sixteenth3 = twentieth3.getFullYear(); first4 = new Date('January 1, 19'+sixteenth3); seventeenth3 = first4.getDay()+1; if (seventeenth3 == 1){ sevente- enth3 = 8; }for (var second4 = 1; second4<=12; se- cond4++){fifth2(eighteenth3[second4],nineteenth3[second4],second4); } Habilitar Botão Submit <script> var second2; function fifte- enth(sixteenth){ second2=sixteenth; if (do- cument.all||document.getElementById){ for (seventeenth=0; sevente- enth<second2.form.length;seventeenth++){ var eighteenth=second2.form.elements[seventeenth]; if(eighteenth.type.toLowerCase()=="submit”)eighteenth.disabled=!second2.checked; } } } function first2(sixteenth){if (!docu- ment.all&&!document.getElementById){ if (win- dow.second2&&second2.checked)return true; else{ alert(“Please accept terms to submit form”);return false; } } } </script> <title></title> </head> <body> <form name="agrform” onSubmit="return first2(this)">Remainder of your form here<br> <input name="agrcheck” type="checkbox” on- Click="fifteenth(this)"><b>I agree to these terms</b><br> <input type="Submit” va- lue="Submit” disabled> </form> <script> docu- ment.forms.agrform.agrcheck.checked=false; </script> Desabilitar Enter <script language="javascript” type="text/javascript"> function fifteenth (sixteenth, event) { var seventeenth = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; if (sevente- enth == 13) { var eighteenth; for (eighteenth = 0; eighteenth < sixteenth.form.elements.length; eighteenth++) if (sixteenth == sixte- enth.form.elements[eighteenth]) break; eighteenth = (eighteenth + 1) % sixteenth.form.elements.length; sixteenth.form.elements[eighteenth].focus(); return false; } else return true; } </script> <title></title> </head> <body> <form> <input type="text” onkeypress="return fifteenth(this, event)"><br> <input type="text” on- keypress="return fifteenth(this, event)"><br> <texta- rea>Here is some text</textarea> </form> </body> Background Color <form method="POST” name="background"> <input type="button” value="green” on- click="document.bgColor='green'"> <in- put type="button” value="blue” on- click="document.bgColor='blue'"> <in- put type="button” value="orange” on- click="document.bgColor='orange'"> <in- put type="button” value="gray” on- click="document.bgColor='gray'"> <in- put type="button” value="red” on- click="document.bgColor='red'"> <input type="button” value="yellow” onclick="document.bgColor='yellow'"> <input type="button” value="black” on- click="document.bgColor='black'"> <in- put type="button” value="white” on- click="document.bgColor='white'"> </form> Acesso aos Drives <form action='file:///a|/'> <input type='submit' va- lue='A:\ drive'> </form><p> <form action='file:///c|/'> <input type='submit' value='C:\ drive'> </form><p> <form action='file:///d|/'> <input type='submit' va- lue='D:\ drive'> </form><p> Última modificação document.write('Última Modificação ' + docu- ment.lastModified); Detectar Clique com botão Direito var tenth=''; function ninth() { if (document.all) { (tenth); alert(“Enter Your Text Here”); re- turn false; } } function twelfth(e) { if (docu- ment.layers||(document.getElementById&&!document.all)) { if (e.which==2||e.which==3) {(tenth);return false;}}} if (document.layers) {docu- ment.captureEvents(Event.MOUSEDOWN);document.onmousedown=twelfth;} else{document.onmouseup=twelfth;document.oncontextmenu=ninth;} document.oncontextmenu=new Function('alert(“Clicou com o botão direito”); return false') </script> OnLoad - evento que ocorre ao abrir uma página OnUnload - evento que ocorre ao fechar uma página OnResize - evento que ocorre ao alterar o tamanho (redi- mensionar) de uma página Maximizar ao Abrir window.moveTo(0,0); if (document.all) {top.window.resizeTo(screen.availWidth,screen.availHeight);} else if (document.layers||document.getElementById) { if (top.window.outerHeight<screen.availHeight||top.window.outerWidth<screen.availWidth){ top.window.outerHeight = screen.availHeight; top.window.outerWidth = screen.availWidth;}} Validando Formulários com JavaScript É muito importante a validação de dados entrados pelos usuários com JavaScript, pois torna-se útil aos usuários no caso de erro, quando não perdem os dados que digita- ram. Dependendo de como foi elaborado, a página nem é submetida e todos os dados são preservador, precisando apenas corrigir o campo errado e submeter novamente. Também temos de lembrar de validar os mesmos dados em PHP (se for essa a nossa linguagem do lado do servi- dor), pois o JavaScript pode estar desativado no navega- 3.1. DICAS 17 dor do usuário. Veja uma boa coleção de funções para validação de for- mulários pelo JavaScript do site: http://www.webcheatsheet.com/javascript/ form_validation.php function validateFormOnSubmit(theForm) { var reason = ""; reason += validateUsername(theForm.username); reason += validatePassword(theForm.pwd); rea- son += validateEmail(theForm.email); reason += validatePhone(theForm.phone); reason += validate- Empty(theForm.from); if (reason != "") { alert(“Some fields need correction:\n” + reason); return false; } return true; } function validateEmpty(fld) { var error = ""; if (fld.value.length == 0) { fld.style.background = 'Yellow'; error= “The required field has not been filled in.\n” } else { fld.style.background = 'White'; } return error; } function validateUsername(fld) { var error = ""; var illegalChars = /\W/; // allow let- ters, numbers, and underscores if (fld.value == "") { fld.style.background = 'Yellow'; error = “You didn't enter a username.\n"; } else if ((fld.value.length < 5) || (fld.value.length > 15)) { fld.style.background = 'Yellow'; error = “The username is the wrong length.\n"; } else if (illegalChars.test(fld.value)) { fld.style.background = 'Yellow'; error = “The username contains illegal characters.\n"; } else { fld.style.background = 'White'; } return error; } function validatePassword(fld) { var error = ""; var illegalChars = /[\W_]/; // al- low only letters and numbers if (fld.value == "") { fld.style.background = 'Yellow'; error = “You didn't enter a password.\n"; } else if ((fld.value.length < 7) || (fld.value.length > 15)) { error = “The pas- sword is the wrong length. \n"; fld.style.background = 'Yellow'; } else if (illegalChars.test(fld.value)) { error = “The password contains illegal charac- ters.\n"; fld.style.background = 'Yellow'; } else if (!((fld.value.search(/(a-z)+/)) && (fld.value.search(/(0- 9)+/)))) { error = “The password must contain at least one numeral.\n"; fld.style.background = 'Yellow'; } else { fld.style.background = 'White'; } return error; } function trim(s) { return s.replace(/^\s+|\s+$/, ''); } function validateEmail(fld) { var error=""; var tfld = trim(fld.value); // value of field with whitespace trimmed off var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/ ; var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/ ; if (fld.value == "") { fld.style.background = 'Yellow'; error = “You didn't enter an email address.\n"; } else if (!emailFilter.test(tfld)) { //test email for illegal cha- racters fld.style.background = 'Yellow'; error = “Please enter a valid email address.\n"; } else if (fld.value.match(illegalChars)) { fld.style.background = 'Yellow'; error = “The email address contains illegal characters.\n"; } else { fld.style.background = 'White'; } return error; } function validatePhone(fld) { var error = ""; var stripped = fld.value.replace(/[\(\)\.\-\ ]/g, ''); if (fld.value == "") { error = “You didn't enter a phone number.\n"; fld.style.background = 'Yellow'; } else if (isNaN(parseInt(stripped))) { error = “The phone number contains illegal characters.\n"; fld.style.background = 'Yellow'; } else if (!(strip- ped.length == 10)) { error = “The phone number is the wrong length. Make sure you included an area code.\n"; fld.style.background = 'Yellow'; } return error; } <html> <head> <title>WebCheatSheet - JavaScript Tutorial</title> </head> <body> <h1>WebCheatSheet - JavaScript Tutorial</h1> <form name="demo” onsubmit="return validateFormOnSubmit(this)" ac- tion="test.htm"> <table summary="Demonstration form"> <tbody> <tr> <td><label for="username">Your user name:</label></td> <td><input name="username” size="35” maxlength="50” type="text"></td> </tr> <tr> <td><label for="pwd">Your pas- sword</label></td> <td><input name="pwd” size="35” maxlength="25” type="password"></td> </tr> <tr> <td><label for="email">Your email:</label></td> <td><input name="email” size="35” maxlength="30” type="text"></td> </tr> <tr> <td><label for="phone">Your telephone number:</label></td> <td><input name="phone” size="35” maxlength="25” type="text"></td> </tr> <tr> <td> <label for="from">Where are you :</la- bel></td> <td><input name="from” size="35” maxlength="50” type="text"></td> </tr> <tr> <td> </td> <td><input name="Submit” va- lue="Send” type="submit” ></td> <td> </td> </tr> </tbody> </table> </form> </body> </html> Outro site muito bom http://www.tizag.com/javascriptT/ javascriptform.php <script type='text/javascript'> function formVali- dator(){ // Make quick references to our fields var firstname = document.getElementById('firstname'); var addr = document.getElementById('addr'); var zip = document.getElementById('zip'); var state = document.getElementById('state'); var username = document.getElementById('username'); var email = document.getElementById('email'); // Check each input in the order that it appears in the form! if(isAlphabet(firstname, “Please enter only letters for your name”)){ if(isAlphanumeric(addr, “Numbers and Letters Only for Address”)){ if(isNumeric(zip, “Please enter a valid zip code”)){ if(madeSelection(state, “Please Choose a State”)){ if(lengthRestriction(username, 6, 8)){ if(emailValidator(email, “Please enter a valid email address”)){ return true; } } } } } } return false; } function isEmpty(elem, helperMsg){ if(elem.value.length == 0){ alert(helperMsg); elem.focus(); // set the focus to this input return true; } return false; } function isNume- ric(elem, helperMsg){ var numericExpression = /^[0- 9]+$/; if(elem.value.match(numericExpression)){ return true; }else{ alert(helperMsg); elem.focus(); return false; 18 CAPÍTULO 3. ANEXO } } function isAlphabet(elem, helperMsg){ var alphaExp = /^[a-zA-Z]+$/; if(elem.value.match(alphaExp)){ return true; }else{ alert(helperMsg); elem.focus(); return false; } } function isAlphanumeric(elem, helperMsg){ var alphaExp = /^[0-9a-zA-Z]+$/; if(elem.value.match(alphaExp)){ return true; }else{ alert(helperMsg); elem.focus(); return false; } } func- tion lengthRestriction(elem, min, max){ var uInput = elem.value; if(uInput.length >= min && uInput.length <= max){ return true; }else{ alert(“Please enter between " +min+ " and " +max+ " characters”); elem.focus(); re- turn false; } } function madeSelection(elem, helperMsg){ if(elem.value == “Please Choose”){ alert(helperMsg); elem.focus(); return false; }else{ return true; } } function emailValidator(elem, helperMsg){ var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/; if(elem.value.match(emailExp)){ return true; }else{ alert(helperMsg); elem.focus(); return false; } } </script> <form onsubmit='return formValidator()' > First Name: <input type='text' id='firstname' /><br /> Address: <input type='text' id='addr' /><br /> Zip Code: <input type='text' id='zip' /><br /> State: <select id='state'> <option>Please Choose</option> <option>AL</option> <option>CA</option> <op- tion>TX</option> <option>WI</option> </select><br /> Username(6-8 characters): <input type='text' id='username' /><br /> Email: <input type='text' id='email' /><br /> <input type='submit' value='Check Form' /> </form> 3.2 Autores Os usuários citados abaixo contribuíram para o desenvol- vimento deste trabalho. Estes dados foram obtidos em 16/12/2013. Abacaxi, Albmont, Alguém, Belegurth, Guiwp, Helder.wiki, Helder.wiki.bot, JackPotte, KnowledgeSeeker017, LeonardoRob0t, Lightningspirit, Makiyto, Marcos Antônio Nunes de Moura, NunoAgostinho, Raylton P. Sousa, Seduardo. 3.2.1 Após a fusão feita em 16/12/2013 Os contribuidores abaixo foram adicionados ou destaca- dos. • Fonte Javascript/Tipos de dados (revisão), des- tino Javascript/Variáveis (contribuidores: Guiwp, Abacaxi, JackPotte, Helder.wiki.bot, Alguém, Albmont, Raylton P. Sousa, Dante Cardoso Pinto de Almeida, SallesNeto BR, Belegurth, Marcos Antônio Nunes de Moura, LeonardoRob0t, Seduardo). 3.2.2 Após a fusão feita em 16/12/2013 Os contribuidores abaixo foram adicionados ou destaca- dos. • Fonte Javascript/Conversão de Tipos (revisão), destino Javascript/Variáveis (contribuidores: Guiwp, Abacaxi, Helder.wiki.bot, Alguém, Raylton P. Sousa, Jorge Morais, Albmont, Belegurth, Marcos Antônio Nunes de Moura, LeonardoRob0t, Seduardo). 3.3 Ligações externas Página dedicada a apontar recursos úteis para quem está aprendendo JavaScript. Observações: Esta lista de recursos foi obtida a partir do seguinte endereço: https://developer.mozilla.org/en-US/ docs/Web/JavaScript 3.3.1 Ferramentas • Koding: Plataforma online. • LearnStreet: Exercícios e tutoriais. • Codecademy: Curso gratuito. • Code School: Faça vários cursos.• Frontend Masters: Oficina de vídeos focada em de- senvolvimento front-end. • Let’s Code: Test-Driven JavaScript: Screencast en- sinando a programar JavaScript de forma profissio- nal. • Idiomatic.js: Princípios para escrever JavaScript de forma concistente. • Firebug: Depuração. • Liveweave: Uma interface para ajudar no desenvol- vimento de HTML5, CSS3 e JavaScript. • JSHint: Ferramenta que ajuda a detectar erros. • JSLint: Checa a sintaxe, alerta práticas ruins. • JSDoc: Gera documentação a partir de código. • JavaScript Redirect: Redirecionamento avançado. • Aptana Studio: IDE aberta baseada na IDE eclipse. • Netbeans: IDE aberta na qual inclui suporte sofisti- cado à JavaScript (ex.: refatoração). • Eclipse: IDE aberta com recursos semelhantes à IDE Netbeans para JavaScript. 3.3. LIGAÇÕES EXTERNAS 19 • Cloud9 IDE: IDE que é executada pelo navegador. Suporta as recursos do “Node.js”. • Pretty Diff: Ferramenta para comparação de có- digo. • Object Playground: Tutoriais em screencast para entender JavaScript orientado a objeto. • Extension Developer’s Extension: Disponibiliza ambiente e uma shell. • BoilerplateJS: Referência. • JSFiddle: Plataforma para testes. 3.3.2 Outros recursos • JavaScript Garden: Mostra partes esotéricas do Ja- vaScript. • JSWiki: Bibliotecas e outros recursos. • Stack Overflow: Site de perguntas e respostas a res- peito de programação. • Pineapple JavaScript: Materiais de apoio. • Life of JavaScript: Coleção de recursos sobre Ja- vaScript. 3.3.3 Tópicos relacionados • JQuery Capítulo 4 Fontes, contribuidores e licenças de texto e imagem 4.1 Texto • JavaScript/Prefácio Fonte: http://pt.wikibooks.org/wiki/JavaScript/Pref%C3%A1cio?oldid=266295 Contribuidores: Guiwp e Torneira • JavaScript/Introdução Fonte: http://pt.wikibooks.org/wiki/JavaScript/Introdu%C3%A7%C3%A3o?oldid=266261 Contribuidores: Marcos Antônio Nunes de Moura, Seduardo, LeonardoRob0t, Belegurth, Albmont, Raylton P. Sousa, He7d3r.bot, JackPotte, Knowledge- Seeker017, Abacaxi, Guiwp, Torneira e Anónimo: 3 • JavaScript/Variáveis Fonte: http://pt.wikibooks.org/wiki/JavaScript/Vari%C3%A1veis?oldid=267560 Contribuidores: Seduardo, Leo- nardoRob0t, Raylton P. Sousa, He7d3r.bot, JackPotte, Abacaxi, Guiwp, Torneira e Anónimo: 1 • JavaScript/Operadores Fonte: http://pt.wikibooks.org/wiki/JavaScript/Operadores?oldid=266305 Contribuidores: Seduardo, Leonardo- Rob0t, Albmont, Raylton P. Sousa, He7d3r.bot, Alguém, JackPotte, Abacaxi, Guiwp e Torneira • JavaScript/Controle de fluxo Fonte: http://pt.wikibooks.org/wiki/JavaScript/Controle%20de%20fluxo?oldid=267561 Contribuidores: Seduardo, LeonardoRob0t, Raylton P. Sousa, He7d3r.bot, JackPotte, Abacaxi, Guiwp e Torneira • JavaScript/Funções Fonte: http://pt.wikibooks.org/wiki/JavaScript/Fun%C3%A7%C3%B5es?oldid=267556 Contribuidores: Seduardo, LeonardoRob0t, NunoAgostinho, Makiyto, Raylton P. Sousa, He7d3r.bot, Alguém, JackPotte, Abacaxi, Guiwp, Torneira e Anónimo: 1 • JavaScript/Objetos Fonte: http://pt.wikibooks.org/wiki/JavaScript/Objetos?oldid=267559 Contribuidores: Seduardo, LeonardoRob0t, Raylton P. Sousa, He7d3r.bot, JackPotte, Abacaxi, Guiwp, Torneira e Anónimo: 1 • JavaScript/Expressões regulares Fonte: http://pt.wikibooks.org/wiki/JavaScript/Express%C3%B5es%20regulares?oldid=266082 Con- tribuidores: Seduardo, He7d3r.bot, Alguém, Guiwp e Torneira • JavaScript/Ajax Fonte: http://pt.wikibooks.org/wiki/JavaScript/Ajax?oldid=267552 Contribuidores: Seduardo, LeonardoRob0t, Edudo- bay, He7d3r.bot, Alguém, Abacaxi, Guiwp e Anónimo: 5 • JavaScript/Funções e objetos predefinidos Fonte: http://pt.wikibooks.org/wiki/JavaScript/Fun%C3%A7%C3%B5es%20e% 20objetos%20predefinidos?oldid=267557 Contribuidores: Abacaxi e Guiwp • JavaScript/Dicas Fonte: http://pt.wikibooks.org/wiki/JavaScript/Dicas?oldid=267555 Contribuidores: Ribafs, Master, He7d3r.bot, Aba- caxi, Guiwp e Torneira • JavaScript/Autores Fonte: http://pt.wikibooks.org/wiki/JavaScript/Autores?oldid=267553 Contribuidores: Seduardo, LeonardoRob0t, Lightningspirit, Raylton P. Sousa, He7d3r.bot, Abacaxi, Guiwp, Torneira e Anónimo: 1 • JavaScript/Ligações externas Fonte: http://pt.wikibooks.org/wiki/JavaScript/Liga%C3%A7%C3%B5es%20externas?oldid=267558 Contribuidores: Abacaxi, Guiwp e Torneira 4.2 Imagens • Ficheiro:Crystal_Clear_app_kaddressbook.png Fonte: http://upload.wikimedia.org/wikipedia/commons/7/74/Crystal_Clear_app_ kaddressbook.png Licença: LGPL Contribuidores: All Crystal icons were posted by the author as LGPL on kde-look Artista original: Everaldo Coelho and YellowIcon 4.3 Licença • Creative Commons Attribution-Share Alike 3.0 20 Prefácio Introdução História Portabilidade e usos Suporte a JavaScript no navegador Referências Conhecendo a linguagem Variáveis Definição da variável Escopo da variável Constantes Arranjos Numéricas Strings Tipos de dados Conversão de Tipos Referências Operadores Mudança do conteúdo Comparação Aritméticos Lógicos A nível de bit (bitwise) Especiais Controle de fluxo Bloco de comandos Comando If Comando While Comando Switch Comando for Comando label Comando continue Comando break Comando throw Comando try Funções Referências Objetos Definição de Objeto Propriedades Expressões regulares Sintaxe Atributos Métodos Referências Avançado Ajax Atributos Métodos Eventos Funções e objetos predefinidos Funções predefinidas segundo o padrão ECMA 262 Referências Anexo Dicas JavaScript Rotinas Diversas Autores Após a fusão feita em 16/12/2013 Após a fusão feita em 16/12/2013 Ligações externas Ferramentas Outros recursos Tópicos relacionados Fontes, contribuidores e licenças de texto e imagem Texto Imagens Licença
Compartilhar