On Github diofeher / jsday
Diógenes Fernandes / @diofeher / Software Engineer at Robots + Rockets
Brendan Eich - Netscape em Abril de 1995
10 dias para criar um protótipo de linguagem leve
Java vs Javascript: primos?
Brendan Eich
European Computer Manufacturers Association
1997: Primeira versão ECMA-262
Especificação finalizada em Junho/2015
x = 5; // Assign 5 to x elem = document.getElementById("demo"); // Find an element elem.innerHTML = x; // Display x in the element var x; // Declare x
// var i; var anchors = document.getElementsByTagName(“a”); for(var i=0, len=anchors.length; i < len; i++) { anchors[i].onclick = function(){ alert(i); // alert 10 ten times }; }
var anchors = document.getElementsByTagName(“a”); for(var i=0, len=anchors.length; i < len; i++) { anchors[i].onclick = (function(i){ return function() { alert(i); // 1, 2, 3... } })(i); }
Código ruim de ler e estranho para pessoas novas na linguagem
var anchors = document.getElementsByTagName(“a”); for(let i=0,len=anchors.length; i < len; i++){ anchors[i].onclick = function(){ alert(i); } }
const API_KEY = '123lkdsfj43ojisKOD21a'; const CONFIG = { TEMPLATES_URL: '/templates', TIMEZONE: 'America/Recife' } CONFIG['TEMPLATES_URL'] = 'http://s3.amazon.com/templates-folder';
// in a browser let RegExp = "Hello!"; console.log(RegExp); // "Hello!" console.log(window.RegExp === RegExp); // false const ncz = "Hi!"; console.log(ncz); // "Hi!" console.log("ncz" in window); // false
var test = "Aqui temos uma\n" + "string que \n" + "tem várias linhas."
let test = `Aqui podemos escrever utilizando uma nova linha e o JS irá reconhecer.` let message = `WhiteSpace string`;
// Usando o operador + var name = 'Tyler Durden'; var phrase = 'As coisas que você possui acabam possuindo você.'; var say = '"'+ phrase +'" por ' + name; console.log(say); // "As coisas que você possui acabam // possuindo você." por Tyler Durden
// Usando o operador + var name = 'Tyler Durden'; var phrase = 'As coisas que você possui acabam possuindo você.'; var say = `"${phrase}" por ${name}`; console.log(say); // "As coisas que você possui acabam // possuindo você." por Tyler Durden
let count = 10, price = 0.25, message = `${count} items cost $${(count * price).toFixed(2)}.`;
var data = { "url": "http://twitter.com/api/", "username": "diofeher", "password": "javascript" }; function apiRequest(data) { var url = data.url, username = data.username, password = data.password; if(!url) { url = "http://instagram.com/api/"; } $.post(url, username, password); }; apiRequest(data);
var data = { "url": "http://twitter.com/api/", "username": "diofeher", "password": "javascript" }; function apiRequest(data) { var { url, username, password } = data; if(!url) { url = "http://instagram.com/api/"; } $.post(url, username, password); }; apiRequest(data);
var reflect = function(value) { return value; };
var getName = () => "Javascript"; // effectively equivalent to: var getName = function() { return "Javascript"; };
var reflect = value => value;
var sum = (num1, num2) => num1 + num2; // effectively equivalent to: var sum = function(num1, num2) { return num1 + num2; };
var test = function() { that = this; var doSomething = function() {}; document.addEventListener("click", function(event) { this.doSomething(event.type); // certo é that }); } document.addEventListener("click", function() { event => this.doSomething(event.type));
var myFunction = function(a, b, c){ a = a || 10; b = b || 5; c = c || 8; return a * b * c; };
Problema: Se o argumento for 0 ou string vazia
var myFunction = function(a, b, c){ a = (typeof a !== "undefined") ? a : 10; b = (typeof b !== "undefined") ? b : 5; c = (typeof c !== "undefined") ? c : 8; return a * b * c; };
var myFunction = function(a=10, b=5, c=8){ return a * b * c; };
function pick(object) { let result = Object.create(null); for (let i = 1, len = arguments.length; i < len; i++) { result[arguments[i]] = object[arguments[i]]; } return result; } let book = { title: "Understanding ECMAScript 6", author: "Nicholas C. Zakas", year: 2015 }; let bookData = pick(book, "author", "year"); console.log(bookData.author); // "Nicholas C. Zakas" console.log(bookData.year); // 2015
function pick(object, ...keys) { let result = Object.create(null); for (let i = 0, len = keys.length; i < len; i++) { result[keys[i]] = object[keys[i]]; } return result; }
let values = [25, 50, 75, 100] console.log(Math.max.apply(Math, values)); // 100
let values = [25, 50, 75, 100] console.log(Math.max(...values)); // 100
function createPerson(name, age) { return { name: name, age: age }; }
function createPerson(name, age) { return { name, age }; }
var language = { name: "Javascript", sayName: function() { console.log(this.name); } };
var language = { name: "Javascript", sayName() { console.log(this.name); } };
“7” == 7 // true “7” === 7 // false
NaN == NaN // false NaN === NaN // false var result = isNan(NaN) // true
Object.is(7, ”7”) // false Object.is(7, 7) // true Object.is(NaN, NaN) // true
function PersonType(name) { this.name = name; } PersonType.prototype.sayName = function() { console.log(this.name); }; let person = new PersonType("Diogenes"); person.sayName(); // outputs "Diogenes"
class PersonClass { // equivalent of the PersonType constructor constructor(name) { this.name = name; } // equivalent of PersonType.prototype.sayName sayName() { console.log(this.name); } } let person = new PersonType("Diogenes"); person.sayName(); // outputs "Diogenes"
function createObject(classDef) { return new classDef(); } let obj = createObject(class { sayHi() { console.log("Hi!"); } }); obj.sayHi(); // "Hi!"
class Element { constructor(element) { this.element = element; } get val() { return this.element; } set val(value) { this.element = value; } } test = new Element("test") console.log(a.val) // "test" a.element = 3; console.log(a.val) // 3
var myBaseObj = { sayName: function(){ // .. do something }; }; var mySubObj = Framework.extend(myBaseObj, { sayName: function(){ this._super.apply(this, arguments); // .. do something else } })
var myBaseObj = { sayName: function(){ // .. do something }; }; var mySubObj = { __proto__: myBaseObj, sayName: function(){ super.sayName(); // .. do something else } })
...