ALGUNAS PECULIARIDADES DE JAVASCRIPT

<script src=”my own” title=”algunas peculiaridades de javascript”>

¡Que onda! Espero que todo ande chido

Dejando de lado el cotorreo típico, y leyendo algunos libros interesantes (ya saben, hay que estudiar 🙂 ), me encontré con algunas particularidades de Javascript que [creo] no existen en otro lenguaje de programación. Cosas que lo hacen aún más interesante de lo que ya es (para mí, digo 😛 ).

Hoisting de Funciones

En este post hablé un poco sobre el Hoisting de código, y más breve aún sobre el Hoisting de funciones. Sólo he visto en Javascript (y tal vez en PHP :/ ) que es posible usar una función antes de su declaración formal, puesto que el intérprete de Javascript lo eleva en un contexto global. Es decir, que esto:

	function miFuncion(){
		console.log("Hola mundo!");
	}

	miFuncion(); //devuelve "Hola mundo!"

Funciona exactamente igual que esto:

	miFuncion(); //devuelve "Hola mundo!"

	function miFuncion(){
		console.log("Hola mundo!");
	}

Coerción en tipos de datos

En este post hablé (y corregí 😀 ) un poco sobre los tipos de datos primitivos en Javascript, así como una forma sencilla de validar dichos tipos de dato como instancia de sus envoltorios. Y es que el problema parte precisamente del intérprete de Javascript, puesto que es posible validar a nivel de primitivos (variables con valores simples) y/o a nivel de referencias (Objetos, Arrays o tipos personalizados). Por ejemplo, a nivel de primitivos es fácil confundir un valor undefined con un valor null:

console.log(undefined == null); //devuelve "true"

Lo cual evidentemente, es un error y generará un error en la lógica de negocio que estemos implementando. Eso es la coerción en tipos de datos, la instancia de la variable es diferente del valor de la variable. El intérprete de Javascript siempre buscará convertir un tipo de dato al valor más primitivo posible. Para evitar esto, se debe comparar en ambos niveles:

console.log(undefined === null); //devuelve "false"

Aridad infinita

La aridad en programación, en atención al concepto original, se refiere al número de argumentos que requiere un operador para realizar efectivamente una operación. Si establecemos una función o procedimiento como un operador matemático, dentro de Javascript, este concepto es bastante extensible. Javascript es el único lenguaje que permite, dentro de su declaración de funciones, ¡un número infinito de argumentos!

¡Ojo! No se confunda este concepto con las características de otros lenguajes de programación en los que se acepta que una función tenga un número variable de argumentos. Javascript se distingue precisamente porque esa cantidad mínima de parámetros se puede aumentar en tiempo de ejecución.

Esto es posible gracias al atributo arguments que poseen todas las funciones declaradas en Javascript. Este atributo es un Array de todos los argumentos de una función, el cual puede modificar su tamaño. Por ejemplo:

var sumarNumeros = function(){
	var suma = 0;
	for (var i = 0; i < arguments.length; i++) {
		suma += arguments[i];
	};
	console.log('La suma es %d', suma);
}

sumarNumeros(2, 2); //devuelve "La suma es 4"
sumarNumeros(1, 2, 3, 4); //devuelve "La suma es 10"
sumarNumeros(); //devuelve "La suma es 0"

Por cierto, si una función es declarada de esta forma (llamada declaración por referencia), el intérprete de Javascript no puede hacerle Hoisting. ¡Hagan la prueba! Sean curiosos y peculiares 😉

</script>

Anuncios