Source: http://www-igm.univ-mlv.fr/~lecroq/cours/tp-javascript.pdf