Desarrollo de Aplicaciones en Internet
Desarrollo de Aplicaciones en Internet
Fuente: A re-introduction to JavaScript
0.1 + 0.2 == 0.30000000000000004; // true
(0.1+0.2).toFixed(2) == "0.30"; // true
Math.sin(3.5);
var circumference = Math.PI * (r + r);
parseInt("123", 10); // 123 (de cadena a entero en base 10)
parseFloat("3.14"); // 3.14 (de cadena a real)
+ "42"; // 42 (diferente a 0+"42")
parseInt("hello", 10); // NaN (not a number)
NaN + 5; // NaN
isNaN(NaN); // true
1 / 0; // Infinity
isFinite(-Infinity); // false
"hello".length; // 5
'hello'.length; // 5
"hello".charAt(0); // carácter "h" (representado como cadena)
"hello, world".replace("hello", "goodbye"); // "goodbye, world"
var a; // undefined en este momento
var name = "simon";
nanne = "garfunkel"; // no da error salvo que usemos 'use strict';
function f() {
var a = 5;
if (true) {
var a = 7; // a ya no vale 5; ¡es la misma variable!
console.log(b); // undefined
document.writeln(c); // excepción ReferenceError (c is not defined)
}
var b;
}
function letTest() {
let x = 1;
if (true) {
let x = 2; // variable diferente
// otro let x en este ámbito provocaría un error
console.log(x); // 2
}
console.log(x); // 1
}
function varTest() {
var x = 31;
if (true) {
var x = 71; // misma variable!
console.log(x); // 71
}
console.log(x); // 71
}
x += 5
x = x + 5
"hello" + " world" // "hello world"
"3" + 4 + 5 // "345" (cadena+entero o entero+cadena -> cadena)
3 + 4 + "5" // "75" (se operan 3 y 4 primero)
17 + "" // "17" (conversión; entero+cadena -> cadena)
123 == "123" // true (conversión implícita)
1 == true // true (conversión implícita)
123 === "123" // false (no hay conversión con ===)
1 === true // false (no hay conversión con ===)
1 != true // false
1 !== true // true
var name = o && o.getName();
var name = otherName || "default";
var allowed = (age > 18) ? "yes" : "no";
var name = "kittens";
if (name == "puppies") {
name += "!";
} else if (name == "kittens") {
name += "!!";
} else {
name = "!" + name;
}
name == "kittens!!" // true
while (true) {
// an infinite loop!
}
var input;
do {
input = get_input();
} while (inputIsNotValid(input))
for (var i = 0; i < 5; i++) {
// Will execute 5 times
}
switch(a + 3) {
case b + 2:
yay();
break; // sale del switch como en C
case 7:
yey();
break;
default:
neverhappens();
}
var obj = new Object();
var obj = {};
var obj = {
name: "Carrot",
"for": "Max",
details: {
color: "orange",
size: 12
}
}
obj.details.color; // orange
var prop= "size"
obj["details"][prop]; // 12
function Person(name, age) {
this.name = name;
this.age = age;
}
// Define una instancia del prototipo:
var You = new Person("You", 24);
obj.name = "Simon";
var name = obj.name; // esta forma suele ser más eficiente
prop= "name"; // el valor de prop se puede leer de un fichero o un formulario
obj[prop] = "Simon";
var name = obj[prop]; // esta permite obtener nombres de propiedades durante la ejecución
var a = new Array();
a[0] = "dog";
a[1] = "cat";
a[2] = 42;
a.length; // 3
var a = ["dog", "cat", "hen"];
a.push("monkey");
a.length; // 4
var a = ["dog", "cat", "hen"];
a[100] = "fox"; // a[90] === undefined
a.length; // 101
["dog", "cat"].forEach(function(currentValue, index, array) {
// Hacer algo con currentValue o array[index]
});
function add(x, y) {
var total = x + y;
return total;
}
add(); // NaN
// No se pueden sumar valores undefined
add(2, 3, 4); // 5
// se suman los dos primeros; el 4 se ignora
function avg() {
var sum = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
sum += arguments[i];
}
return sum / arguments.length;
}
avg(2, 3, 4, 5); // 3.5
var avg = function() {
var sum = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
sum += arguments[i];
}
return sum / arguments.length;
};
var g=avg;
g(2, 3, 4, 5);
var a = 1;
var b = 2;
(function() {
var b = 3;
a += b;
})();
a; // 4
b; // 2
function Person(first, last) {
this.first = first;
this.last = last;
this.fullName = function() {
return this.first + ' ' + this.last;
};
this.fullNameReversed = function() {
return this.last + ', ' + this.first;
};
}
var s = new Person("Simon", "Willison");
function personFullName() {
return this.first + ' ' + this.last;
}
function personFullNameReversed() {
return this.last + ', ' + this.first;
}
function Person(first, last) {
this.first = first;
this.last = last;
this.fullName = personFullName;
this.fullNameReversed = personFullNameReversed;
}
function Person(first, last) {
this.first = first;
this.last = last;
}
Person.prototype.fullName = function() {
return this.first + ' ' + this.last;
};
Person.prototype.fullNameReversed = function() {
return this.last + ', ' + this.first;
};
function Person(first, last) {
this.first = first;
this.last = last;
}
Person.prototype.fullName = function() {
return this.first + ' ' + this.last;
};
var s= new Person("Simon","Willison");
s.__proto__ === Person.prototype; // true
s.age= 32; // propiedad explícita que no usa el prototipo
var t= s.fullName() + ", " + s.age; // "Simon Willison, 32"
s = new Person("Simon", "Willison");
s.firstNameCaps(); // TypeError on line 1: s.firstNameCaps is not a function
Person.prototype.firstNameCaps = function firstNameCaps() {
return this.first.toUpperCase()
}; // cualquier Person existente responde ahora a esta función
s.firstNameCaps(); // "SIMON"
var s = "Simon";
s.reversed(); // TypeError on line 1: s.reversed is not a function
String.prototype.reversed = function reversed() {
var r = "";
for (var i = this.length - 1; i >= 0; i--) {
r += this[i];
}
return r;
};
s.reversed(); // nomiS
class SimpleDate {
constructor(year, month, day) {
// comprueba que es una fecha correcta
// ...
this._year = year;
this._month = month;
this._day = day;
}
addDays(nDays) {...}
getDay() {
return this._day;
}
}
let today = new SimpleDate(2017, 1, 14);
today.addDays(1);
today._day += 1
let getDay = SimpleDate.prototype.getDay;
getDay.call(today);
getDay.call(tomorrow);
tomorrow.getDay();
class Employee {
constructor(firstName, familyName) {...}
getFullName() {...};
}
}
class Manager extends Employee {
constructor(firstName, familyName) {
super(firstName, familyName);
this._managedEmployees = [];
}
addEmployee(employee) {
this._managedEmployees.push(employee);
}
}
function betterExampleNeeded() {
var a = 1;
function oneMoreThanA() {
return a + 1;
}
return oneMoreThanA();
}
function makeAdder(a) {
return function(b) {
return a + b;
};
}
var x = makeAdder(5);
var y = makeAdder(20);
x(6); // 11
y(7); // 27
function f () {
var funcs = [];
for (var i = 0; i < 3; i++) {
funcs[i] = function() {
console.log("My value: " + i);
};
funcs[i](); // Aquí se obtiene un resultado
}
return funcs;
}
var m= f();
for (var j = 0; j < 3; j++) {
m[j](); // Aquí otro diferente
}
function createfunc(i) {
return function() { console.log("My value: " + i); };
}
function f () {
var funcs = [];
for (var i = 0; i < 3; i++) {
funcs[i] = createfunc(i);
}
return funcs;
}
var m= f();
for (var j = 0; j < 3; j++) {
m[j]();
}
function f () {
var funcs = [];
for (let i = 0; i < 3; i++) {
funcs[i] = function() {
console.log("My value: " + i);
};
funcs[i](); // 0, 1, 2
}
return funcs;
}
var m= f();
for (var j = 0; j < 3; j++) {
m[j](); // 0, 1, 2
}
var list = document.getElementById("list");
for (let i = 1; i <= 5; i++) {
let item = document.createElement("li");
item.appendChild(document.createTextNode("Item " + i));
item.addEventListener("click", function (ev) {
console.log("Item " + i + " is clicked.");
}, false);
list.appendChild(item);
}