Funções

alert(msg) // mostra mensagem
valor = prompt(msg) // recebe um valor
resultado = confirm(msg) // exibe mensagem e retorna true se usuário confirmar ou false se cancelar
console.log(msg) // grava mensagens no console

Elementos da página:

var obj = document.getElementById("id");

text.value: obtem/altera valor de um input box de texto.

label.textContent: obtem/altera o valor de um label (span)

eval(): converte valor texto para numérico

Tipos de dados

numeros: 0, -5, 1.234
strings: 'abc', "def", ""
booleans: true, false, a > b, 1 === 2

Use a função typeof(x) para determinar o tipo dos dados. O resultado é uma string:

typeof("x") => "string"
typeof(123) => "number"
typeof(true) => "boolean"
typeof(Math) => "object"
typeof(Math.sqrt) => "function"

Type coercion

var s = "1";
var n = +s; // = 1

var n = 1;
var s = ""+n; // = "1"

var d = new Date; // Date object
var t = +new Date; // Integer timestamp in milliseconds

var n = 255;
n.toString(2); // Number to binary
n.toString(8); // Number to octal
n.toString(16); // Number to hexa
n.toString(36); // Number to base-36 (0-9a-z)

parseInt('10011011', 2) // Binary to integer
parseInt('777', 8) // Octal to integer
parseInt('DEADBEEF', 16) // Hexa to integer
parseInt('FELIPO', 36) // base-36 to integer

ASCII Character code

var s = "abc";
var ascii = s.charCodeAt(0); // => 97 ("a")
var letter = String.fromCharCode(ascii); // => "a"

Operadores

operadores aritméticos: + - * / %
operadores lógicos: && || !
operadores de comparação: > < === != >= <=
operadores de precedência: ( )

Estruturas de controle

if (condicao) { verdadeiro; } else { falso; }

for (inicio; condicao; incremento) { bloco; }

while (condicao) { bloco; }

do { bloco; } while (condicao);

Manipulando strings:

"batman".substring(2, 4) === "tm"

"string".length: tamanho de uma string

Variáveis locais vs. globais:

var nome_var = valor; (Cria variável local da função ou global se criada fora de função.)

nome_var = valor; (Cria variável sempre global se ela não existir no contexto atual. Evite usar este tipo de declaração de varíavel.)

Funções

function nome(p1, p2) {
...
return x;
}

// ou

var nome = function(p1, p2) {
...
return x;
};

Arrays

var a = [0, 1, 2, 3, 4];
a.length // Tamanho do array.
keys(a) // Chaves em uso.
novo_array = a.map(fn); // Executa fn(x) para cada elemento x, retornando novo_array com os valores resultantes.
novo_array = a.filter(fn); // Executa fn(x) para cada elemento, retornando apenas aqueles que retornarem "true" no teste.
result = a.reduce(fn); // Executa fn(a, b) para cada 2 elementos do array retornando a redução total no fim. Útil para somatórios, produtos, concatenação, etc.
a.forEach(fn); // Executa fn(x) para cada elemento do array.

Outros método: reduceRight, insert, push, pop, reverse, slice, indexOf, lastIndexOf, join

Matemática

// Usar o objeto Math. Exemplo: Math.sqrt(2)

abs, acos, asin, atan, atan2, ceil, cos, exp, floor, log, max, min, pow, random, round, sin, sqrt, tan, toString

Constantes: PI, E, LN10, LN2, LOG10E, SQRT2

Números

var n = 1;

n.toFixed(2); Converte em string com duas casas decimais.



// Objetos:

var nome_objeto = {

    atributo1: valor1,

    atributo2: valor2,

    metodo: function(p1, p2) {
        this.atributo1 = p1 / 100;
        this.atributo2 = p2 * 10;
        return p1 + p2;
    }
};

nome_objeto.atributo1 = nome_objeto.atributo2 * 2;
nome_objeto["atributo1"] = nome_objeto["atributo2"] * 2;
x = nome_objeto.metodo(1, 2);
x = nome_objeto["metodo"](1, 2);
x = nome_objeto["metodo"].call(nome_objeto, 1, 2);

var outro_objeto = new Object();
outro_objeto.atributo = valor;
outro_objeto.metodo = function(x) {
    return x * 2;
};


// Construtor - Método 1
// Desvantagens: Criação dos objetos é mais lenta e usa mais memória, pois cada objeto tem uma cópia das funções.
// Vantagens: Mais simples e chamada dos métodos é mais rápida. Permite acesso a variável privada.
// Indicado para objetos únicos ou com poucas instâncias.

function MeuObjeto(x, y) {
    var _n = "Variável privada: " + x + ", " + y;
    this.x = x;
    this.y = y;    
    
    this.move = function (dx, dy) {
        this.x += dx;
        this.y += dy;
    };
    
    this.print = function() {
        console.log(this.x, this.y, _n);
    };
}

// Construtor - Método 2
// Vantagens: Criação dos objetos é mais rápida e usa menos memória (as funções são compartilhadas)
// Desvantagens: Mais complexo e a chamada dos métodos tem um pequeno overhead. Não permite acesso a variável privada.
// Indicado para objetos com muitas instâncias.

var obj = new MeuObjeto(10, 20);

function MeuObjeto(x, y) {
    var _n = "Variável privada não acessível aos métodos do prototype."
    this.x = x;
    this.y = y;
}
    
MeuObjeto.prototype.move = function (dx, dy) {
    this.x += dx;
    this.y += dy;
};

MeuObjeto.prototype.print = function() {
    console.log(this.x, this.y);
};


var obj = new MeuObjeto(10, 20);