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
}
})
...