Buenas tardes, César.
Antes de empezar la contestación a tu corrección quería agradecerte tu tiempo dedicado.
Sobre lo que me comentas de la respuesta a). Digo que es una fecha pasada porque partí de la base que todos los milesegundos los multiplicabamos por "-1" que es el valor del parámetro "days" que recibe la función "createCookie()" . Me basé en este caso concreto. Quizás tenía que haber hecho unos comentarios absteniéndome de este caso y hacerlos en general.
Sobre el apartado d), sí me había hecho un lío. Ahora veo mi error. Después de corregir el error el código quedará así:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
var ultimaCookie;
function datosCookies(){
var cookie = [];
var valor = [];
for(var i=0; i<3; i++){
cookie[i] = prompt('Entra nombre cookie:');
valor[i] = prompt('Entrar valor cookie:');
createCookie(cookie[i],valor[i],1);
};
var ultimaCookie = difinirUltimaCookie();
}
function difinirUltimaCookie(){
var numeroCookies = document.cookie.split(';');
ultimaCookie = numeroCookies[numeroCookies.length-1].substring(1, numeroCookies[numeroCookies.length-1].indexOf('='));
}
function mostrarTodasLasCookies() {
var numeroCookies = document.cookie.split(';');
var msg = 'Hay '+numeroCookies.length+' cookies en el documento.\n\n';
for(var i=0; i<numeroCookies.length; i++){
var cookieNombre = numeroCookies[i].substring(0, numeroCookies[i].indexOf('='));
msg = msg + 'Cookie '+(i+1)+' con nombre: '+cookieNombre;
var cookieValor = numeroCookies[i].substring((numeroCookies[i].indexOf('=')+1), numeroCookies[i].length);
msg = msg + ' y valor: '+cookieValor+'\n\n';
};
alert(msg);
}
function createCookie(name,value,days) {
if (days){
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}else{
var expires = "";
}
document.cookie = name+'='+value+expires+"; path=/";
}
function eraseCookie(){
alert(ultimaCookie);
createCookie(ultimaCookie,'',-2);
}
</script>
</head>
<body>
<div id="numeroCookiescabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplo JavaScript</h3>
</div>
<div id="pulsador" style="color: blue;"><a href="#" onclick="datosCookies()">Crear cookies</a> <a href="#" onclick="mostrarTodasLasCookies()">Mostrar todas las cookies</a> <a href="#" onclick="eraseCookie()">Borrar la última cookie</a></div>
</body>
</html>
Pero me surge una duda, si en la función "datosCookies()" asigno un valor a la variable "ultimaCookie" sin definirla, la función "eraseCookie()" no conoce la variable "ultimaCookie". Es decir, si dejo el código así no funciona:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
var ultimaCookie;
function datosCookies(){
var cookie = [];
var valor = [];
for(var i=0; i<3; i++){
cookie[i] = prompt('Entra nombre cookie:');
valor[i] = prompt('Entrar valor cookie:');
createCookie(cookie[i],valor[i],1);
};
ultimaCookie = difinirUltimaCookie();
}
function difinirUltimaCookie(){
var numeroCookies = document.cookie.split(';');
ultimaCookie = numeroCookies[numeroCookies.length-1].substring(1, numeroCookies[numeroCookies.length-1].indexOf('='));
alert(ultimaCookie);
}
function mostrarTodasLasCookies() {
var numeroCookies = document.cookie.split(';');
var msg = 'Hay '+numeroCookies.length+' cookies en el documento.\n\n';
for(var i=0; i<numeroCookies.length; i++){
var cookieNombre = numeroCookies[i].substring(0, numeroCookies[i].indexOf('='));
msg = msg + 'Cookie '+(i+1)+' con nombre: '+cookieNombre;
var cookieValor = numeroCookies[i].substring((numeroCookies[i].indexOf('=')+1), numeroCookies[i].length);
msg = msg + ' y valor: '+cookieValor+'\n\n';
};
alert(msg);
}
function createCookie(name,value,days) {
if (days){
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}else{
var expires = "";
}
document.cookie = name+'='+value+expires+"; path=/";
}
function eraseCookie(){
createCookie(ultimaCookie,'',-2);
}
</script>
</head>
<body>
<div id="numeroCookiescabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplo JavaScript</h3>
</div>
<div id="pulsador" style="color: blue;"><a href="#" onclick="datosCookies()">Crear cookies</a> <a href="#" onclick="mostrarTodasLasCookies()">Mostrar todas las cookies</a> <a href="#" onclick="eraseCookie()">Borrar la última cookie</a></div>
</body>
</html>
Por qué ocurre este fenómeno? Por qué tengo que definir otra vez la variable "ultimaCookie" dentro de la función "datosCookies()" si ya la había definido anteriormente como una variable global. Además, si la vuelvo a definir dentro de una función no se convierte en una varible local? No entiendo.
También intenté pasar la variable "ultimaCookie" de la función "mostrarTodasLasCookies()" a la función "eraseCookie()" mediante el método ".bind()", pero ésta última no la conoce. Tampoco lo entiendo.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function datosCookies(){
var cookie = [];
var valor = [];
for(var i=0; i<3; i++){
cookie[i] = prompt('Entra nombre cookie:');
valor[i] = prompt('Entrar valor cookie:');
createCookie(cookie[i],valor[i],1);
};
}
function mostrarTodasLasCookies() {
var numeroCookies = document.cookie.split(';');
var msg = 'Hay '+numeroCookies.length+' cookies en el documento.\n\n';
for(var i=0; i<numeroCookies.length; i++){
var cookieNombre = numeroCookies[i].substring(0, numeroCookies[i].indexOf('='));
msg = msg + 'Cookie '+(i+1)+' con nombre: '+cookieNombre;
var cookieValor = numeroCookies[i].substring((numeroCookies[i].indexOf('=')+1), numeroCookies[i].length);
msg = msg + ' y valor: '+cookieValor+'\n\n';
};
alert(msg);
var ultimaCookie = numeroCookies[numeroCookies.length-1].substring(1, numeroCookies[numeroCookies.length-1].indexOf('='));
var borrarCookie = eraseCookie.bind(undefined, ultimaCookie);
}
function createCookie(name,value,days) {
if (days){
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}else{
var expires = "";
}
document.cookie = name+'='+value+expires+"; path=/";
}
function eraseCookie(){
alert(ultimaCookie);
createCookie(ultimaCookie,'',-2);
}
</script>
</head>
<body>
<div id="numeroCookiescabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplo JavaScript</h3>
</div>
<div id="pulsador" style="color: blue;"><a href="#" onclick="datosCookies()">Crear cookies</a> <a href="#" onclick="mostrarTodasLasCookies()">Mostrar todas las cookies</a> <a href="#" onclick="eraseCookie()">Borrar la última cookie</a></div>
</body>
</html>
Gracias