Computación Web (2025/26)
var n = 1; // variable global
var sumDoubled = function(m) {
var mDoubled = 2 * m; // variable local
n += mDoubled;
}
sumDoubled(2);
n; // 5
let sum_up_to = function(n) {
let total = 0;
for (let i = 1; i <= n; i++) {
total += i;
}
return total;
}
if, switch
for, while, do while
return, break, continue
if (command === "create") {
// ...
}
if (command !== "remove") {
// ...
}
if (num >= 7) {
// ...
}
if (command === "create" || command === "remove") {
// ...
}
if (command === "remove" && num > 7) {
// ...
}
let a = false;
while (!a) {
// ...
}
let count = 0;
while (count < 10) {
console.log(count);
count++;
}
for (let count = 0; count < 10; count++) {
console.log(count);
}
let person = {fname: "Lisa", lname: "Simpson", age: 25};
for (let x in person) {
console.log(person[x]);
}
for (let value of Object.values(person)) {
console.log(value);
}
let count = 0;
let word = "University";
let active = true;
let square = function(n) {
return n * n;
};
let color = {
r: 30,
g: 255,
b: 128,
luminosity: function() {
return 0.21 * this.r + 0.72 * this.g + 0.07 * this.b;
}
};
let emptyObject = {};
let student = {
"first-name": "Lisa",
"last-name": "Simpson"
};
student["first-name"] // "Lisa"
student["middle-name"] // undefined
student["FIRST-NAME"] // undefined
let book = {
title: "El ingenioso hidalgo Don Quijote de la Mancha",
year: 1605,
author: {
name: "Miguel",
surname: "de Cervantes Saavedra",
birthYear: 1547
}
};
book.year; // 1605
book.author.name; // "Miguel"
book.author['birthPlace'] = 'Alcalá de Henares'
book.originalLanguage = 'Spanish';
Los objetos se manipulan por referencia (como en Java)
let x = book;
x.genre = 'novel';
let genre = book.genre;
let a = {}, b = {}, c = {};
a = b = c = {};
let add = function(a, b) {
return a + b;
};
let sum = add(3, 4); // sum is 7
function add(a, b) {
return a + b;
}
let sum = add(3, 4); // sum is 7
let color = {
r: 30,
g: 255,
b: 128,
luminosity: function() {
return 0.21 * this.r + 0.72 * this.g + 0.07 * this.b;
}
};
color.luminosity(); // 198.86
let color = {
r: 30,
g: 255,
b: 128,
luminosity() {
return 0.21 * this.r + 0.72 * this.g + 0.07 * this.b;
}
};
color.luminosity(); // 198.86
let Color = function(r, g, b) {
// Create the properties of the object
this.r = r;
this.g = g;
this.b = b;
// Create the methods of the object
this.luminosity = function() {
return Math.round(0.21 * this.r + 0.72 * this.g
+ 0.07 * this.b);
}
this.toGrayScale = function() {
let a = this.luminosity();
return new Color(a, a, a);
}
}
let red = new Color(255, 0, 0);
red.luminosity(); // 54
let gray = red.toGrayScale(); // Color (r: 54, g: 54, b: 54)
class Color {
constructor(r, g, b) {
this.r = r;
this.g = g;
this.b = b;
}
get luminosity() {
return Math.round(0.21 * this.r + 0.72 * this.g
+ 0.07 * this.b);
}
toGrayScale() {
let a = this.luminosity;
return new Color(a, a, a);
}
}
let red = new Color(255, 0, 0);
red.luminosity; // 54
let gray = red.toGrayScale(); // Color (r: 54, g: 54, b: 54)
let add = function (a, b) {
if (typeof a !== 'number' || typeof b !== 'number') {
throw {
name: 'TypeError',
message: 'add needs numbers'
};
}
return a + b;
}
try {
add("seven");
} catch (e) {
console.log('Ups!');
console.log(e.name + ': ' + e.message);
}
let empty = [];
let letters = ['A', 'B', 'C', 'D', 'E', 'F'];
empty[1] // undefined
letters[1] // 'B'
empty.length // 0
letters.length // 6
letters.length = 3;
// letters is ['A', 'B', 'C']
letters[letters.length] = 'Y';
// letters is ['A', 'B', 'C', 'Y']
letters.push('Z');
// letters is ['A', 'B', 'C', 'Y', 'Z']
delete letters[2];
// letters is ['A', 'B', undefined, 'Y', 'Z']
letters.splice(2, 1);
// letters is ['A', 'B', 'Y', 'Z']
<!-- directamente con el elemento script
(en la cabecera o en el cuerpo del documento) -->
<script type="text/javascript">
let d = new Date();
document.write(d.toLocaleString());
</script>
<!-- from an external resource -->
<script src="scripts/util.js" type="text/javascript"></script>
<!-- from an HTML event handler -->
<input type="button" value="Change" onclick="changeName()">
<p onmouseover="showHelp('p1')">...</p>
Cargar el código JavaScript al fondo del documento permite presentar más rápidamente la página (se cargan antes las imágenes, hojas CSS, etc.)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Mi primera página jQuery</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
console.log("ready!");
});
</script>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
// Se ejecuta el código de inicialización cuando el árbol
// esté cargado
$(document).ready(function() {
console.log("ready!");
});
// Forma compacta equivalente a lo anterior
$(function() {
console.log("ready!");
});
var title = $("<h1>¡Hola!</h1>");
title.css("font-family", "sans-serif");
title.css("color", "navy")
var body = $("body");
body.prepend(title);
title.fadeIn(5000);
title.fadeOut(5000);
var title = $("<h1>¡Hola!</h1>")
.css("font-family", "sans-serif")
.css("color", "navy");
$("body").prepend(title);
title.fadeIn(5000)
.fadeOut(5000);
// Lee el atributo href del primer enlace:
$("a").first().attr("href");
// Escribe el atributo title de todos los nombres de escritor
$(".escritor").attr("title", "Esto es un nombre de escritor");
// Cambia varios atributos a la vez
$("#foto-cervantes").attr({src: "cervantes-2.jpg",
alt: "Cervantes por Luis de Madrazo"});
// Elimina un atributo
$("#foto-quevedo").removeAttr("height");
// Lee el valor de una propiedad CSS:
$(".info").first().css("font-size");
// Establece el valor de una propiedad CSS:
$(".info").css("font-variant", "small-caps");
// Establece una propiedad compuesta
$(".retrato").css("border", "solid red 2px");
// Establece varias propiedades a la vez:
$(".retrato").css({"padding": "5px",
"background-color": "gray",
"filter": "grayscale(50%)"});
// Elimina la pertenencia a una clase:
$(".escritor").last().removeClass("escritor");
// Añade la pertenencia a una clase:
$("a").last().addClass("encuadrado");
// Comprueba la pertenencia a una clase:
$("a").last().is(".encuadrado");
// Alterna la pertenencia a una clase:
$("a").last().toggleClass("encuadrado");
// Lee el contenido de un elemento como texto sin formato:
var t1 = $(".info").first().text();
// Lee el contenido de un elemento como texto HTML:
var t2 = $(".info").first().html();
// Establece el contenido de un elemento (texto plano):
$(".info").first().text("Texto borrado.");
// Establece el contenido de un elemento (HTML):
$(".info").first().html("Texto <strong>borrado</strong>.");
<!DOCTYPE html>
<html>
<head>
<title>Barney says...</title>
</head>
<body>
<h1>Barney says</h1>
<p>
This is going to be <em>legendary</em>
</p>
</body>
</html>
// Añade un nuevo hijo (es decir, inserta como último hijo)
$("ul").append("<li><div class='escritor'>José de Espronceda</div></li>");
// Añade un nuevo hijo (es decir, inserta como primer hijo)
let alfonso_div = $('<li>').append($('<div>')
.addClass("escritor")
.text("Alfonso X el Sabio"));
$("ul").prepend(alfonso_div);
// Añade dos elementos hermanos, uno inmediatamente antes
// y el otro inmediatamente después de cada elemento h1:
$("h1").before("<hr>");
$("h1").after("<hr>");
// Se pueden hacer las inserciones a la inversa,
// invocando los métodos sobre el nodo a insertar:
$(document.createTextNode(": escritores")).appendTo("h1");
$("<cite>[Wikipedia] </cite>").prependTo($(".info"));
$("<hr>").insertBefore("ul");
$("<hr>").insertAfter("ul");
// Envuelve elementos en otro elemento:
$(".retrato").wrap("<div>");
// Envuelve el contenido de un elemento dentro de otro:
$(".escritor").wrapInner("<strong>");
$(".retrato").clone().insertBefore("ul");
// Vacía el contenido de un nodo, pero no elimina el nodo:
$(".retratos").first().empty();
// Elimina un nodo con todo su contenido:
$("li").last().remove();
// Desenlaza un nodo del árbol, pero se conserva en una variable
let node = $("h1").detach();
$("body").append(node);
// Lee el valor de un control:
$("input[name='pregunta1'").val();
// Cambia el valor de un control:
$("input[name='pregunta2'").val("Córdoba");
// Lee el botón tipo radio marcado:
$("input[name='pregunta3']:checked").val();
// Marca un botón de tipo radio:
$("input[name='pregunta3'][value='quevedo']").prop("checked", true);
// Lee los controles marcados de tipo checkbox:
$("input[name='pregunta4']:checked").each(function(i, e) {
console.log($(e).attr("value"));
});
// Marca controles de tipo checkbox:
$("input[name='pregunta4']").val(['gongora', 'cervantes']);
Permiten registrar acciones a llevar a cabo cuando ocurran determinados eventos sobre un elemento de la página. Por ejemplo:
$(document).ready(function() {
// Código a ejecutar cuando se haya cargado
// el árbol DOM del documento.
});
$(window).on("load", function() {
// Código a ejecutar cuando se haya representado la página
// y cargado todos sus recursos adicionales.
});
$(window).on("unload", function() {
// Código a ejecutar cuando se abandone la página
// (se sigue un hipervínculo, se recarga el documento,
// se va hacia atrás o adelante).
});
$("#img1").on("error", function() {
// Código a ejecutar cuando se produzca un error
// en la carga del elemento (p.e. una imagen).
});
$(window).resize(function() {
// Código a ejecutar cuando se cambie el tamaño
// de la ventana.
});
$(window).scroll(function() {
// Código a ejecutar cuando se haga scroll en la página.
});
$("#e1").scroll(function() {
// Código a ejecutar cuando se haga scroll
// en el elemento con identificador #e1.
});
$("input[name=email]").on("change", function() {
// Código a ejecutar cuando cambie el valor del control.
});
$("form").on("submit", function(event) {
// Código a ejecutar cuando el usuario presione en un botón
// de envío del formulario.
// En este ejemplo, se está evitando el envío:
event.preventDefault();
});
$("input[name=email]").on("focus", function() {
// Código a ejecutar cuando el control consiga el foco.
});
$("input[name=email]").on("blur", function() {
// Código a ejecutar cuando el control pierda el foco.
});
$("#e1").on("focusin", function() {
// Código a ejecutar cuando el elemento #e1
// o algún descendiente suyo consiga el foco.
});
$("#e1").on("focusout", function() {
// Código a ejecutar cuando el elemento #e1
// o algún descendiente suyo pierda el foco.
});
$("#e1").on("click", function() {
// Código a ejecutar cuando el usuario haga click
// sobre el elemento #e1.
});
$("#e1").on("dblclick", function() {
// Código a ejecutar cuando el usuario haga doble click
// sobre el elemento #e1.
});
$("#e1").on("mouseenter", function() {
// Código a ejecutar cuando el puntero entre en el área
// del elemento #e1.
});
$("#e1").on("mouseleave", function() {
// Código a ejecutar cuando el puntero abandone el área
// del elemento #e1.
});
$("#e1").on("mousedown", function(event) {
// Se ejecuta cuando se presiona un botón del ratón
// mientras el puntero está dentro del área de visualización de #e1.
// También se puede comprobar qué botón está pulsado.
switch(event.button) {
case 0:
// botón izquierdo presionado
break;
case 1:
// botón central presionado
break;
case 2:
// botón derecho presionado
break;
}
});
$("#e1").on("mouseup", function(event) {
// Código a ejecutar cuando se suelte un botón
// dentro del área del elemento #e1.
// Se puede saber qué botón se ha liberado con event.button.
});
$("#e1").on("mousemove", function(event) {
// Código a ejecutar cuando se mueva el cursor
// dentro del área del elemento #e1.
});
En todos los eventos anteriores se pueden obtener las coordenadas del cursor con event.pageX, event.pageY, event.screenX, event.screenY, event.offsetX y event.offsetY. También se puede saber qué botones del ratón están presionados con event.buttons. Más información sobre eventos de ratón.