Argumentos por defecto en funciones javaScript

En PHP es posible (y sencillo) declarar parámetros por defecto en las funciones.

<?php
function qq($a,$b=2)
	{
	return $a+$b;
	}

echo qq(3);		// Devuelve 5
echo qq(3,3);	// Devuelve 6
?>

Vemos que si no asignamos un valor a $b, la función tiene reservado para $b un valor por defecto.

Lamentablemente en javaScript no es posible declarar un argumento por defecto en una función de un modo tan directo. El siguiente ejemplo **no funciona**:

<script type="text/javascript">
function qq(a,b=2)	// Esto no va a funcionar
	{
    return a+b;
	}
</script>

¿Cómo podemos conseguirlo? Pues con un poco de ingenio es posible expresar la idea de «argumento por defecto en funciones javaScript» de la siguiente manera:

<script type="text/javascript">
function qq(a,b)
	{
	if(!b){var b=2;} // Si no hay b, b=2
	return a+b;
	}

document.write(qq(3));		// Devuelve 5
document.write(qq(3,3));	// Devuelve 6
</script>

¿Fácil, no?

Actualización
Como muy bien apunta Jonathan en el primer comentario, la función no devuelve el valor correcto si usamos por ejemplo qq(3,3). La razón es !b sólo comprueba si b es true o false, y entiende que el valor cero es false. Para subsanarlo, retocamos la línea 4 de la función de este modo:

	if(b==null){var b=2;} // Si no hay b, b=2

Acerca de esta entrada

Libros en Amazon.es:
Sobre informática | Sobre PHP | Sobre CSS | Sobre javaScript