Funciones globales de Javascript

Así como JavaScript proporciona objetos predefinidos globales y define tipos de datos, también proporciona una serie de funciones que pueden llmarse de forma globl, sin necesidad de un objeto.

Se trata de las funciones: eval, isNan, Number, String, parseInt, parseFloat, escape, unescape.

eval()
Se usa para evaluar una cadena con código JavaScript. En el argumento se le pasa cualquier cade de caraceres con instrccuiones de Javascript, esta función estre la función y la ejecuta. Cuidado, poque esta función es peligrosa por su capacidad para inyectar código. Además es lenta. O sea usarla en el improbable caso de que no haya otro remedio.

var b = 5;

var suma = eval("4 + b")

console.log(suma)     // 9

var lista = [1,2,3,4];

eval("var v = lista.pop()");

console.log(v)     //v contiene 4

isFinite()
Javascript maneja el número infinito como valor predefinido Infinity. Por ejemplo, si divides por cero no se produce un error, si no que se obtiene como resultado este valor, infinity. Si un resultado en una operación aritmética es erróneo se produce como resultado NaN, not a number. La función isFinite() nos vale para verificar si un valor numérico es utilizable, o sea no es NaN o Infinity.
Da el mismo resultado que una comparación valor !== Infinity

var calculo;

calculo = 100/0;

console.log (isFinite(calculo));      //false, calculo es Infinity

calculo = 400 + "a"

console.log (isFinite(calculo));      //false, calculo es NaN

isNaN()
Una operación aritmética debe dar como resultado un valor numérico o un objeto Number, si no es así produce el valor NaN, en lugar de lanzar un error. 
Esta función permite detectar esas situaciones. Muy útil para la gestión de errores en nuestros scripts. 
Y también para detectar si un dato es una cadena no convertible en número. Ojo isNaN("23") nos daría false por que "23" se convierte en número, pero isNaN("a23") nos daría true, porque "a23" no se puede convertir en número.

var nombre = "Juan";

var edad = 32

var resultado = nombre * edad;

console.log(resultado);        //NaN

console.log(isNaN(resultado) );      //true

parseFloat()
Convierten una la cadena que se le pasa como argumento a un valor numérico de como flotante, o sea, un valor decimal. El argumento que se le puede pasar es cualquier cadena de dígitos, con signo y con la letra E para indicar el exponente (E) de 10. No admite un segundo argumento. Si la cadena no es una representación numérica válida la función deuelve NaN
Lo del exponente viene perfecto para usar números en la también llamada notación científica, del estilo 2·103, que sería 2000, o 2·10-1 para 0.2
Aunque Javascript usa esta función sin que se le pida en sus conversiones internas de datos según el contexto, es bueno usarla para prevenir posibles errores

var pi = "3.141516";

var long, radio=4;

long = 2*parseFloat(pi)*radio;

console.log(long);
//sería igual que

long = 2*pi*radio;

parseInt()
Convierte una cadena de caracteres en un valor numérico entero. La función lleva como argumento la cadena a convertir formada por un signo opcional y una serie de dígitos. Opcionalmente puede llevar un segundo argumento para indicar la base de numeración en que está escrita la cadena. Por defecto usa el sistema decimal, base 10.
La cadena sólo podrá contener caractéres válidos para el sistema de numeración indicado: dígitos (0..9 para la base 10, 0 1 para números binarios, 0..7 para sistema octal, 0..9, A..F para sistema hexadecimal) y signo (+, -).
Si encuentra algún carácter no válido sólo interpreta desde el principoio de la cadena hasta el carácter no válido. Si comienza por un carácter ilegal devuelve NaN.
Javascript usa la función en su conversión interna de datos, porlo que no es imprescindible llamarla siempre, pero es bueno usarla para prevenir errores ante datos inesperados o imprevistos.

var binario = "0111111";

var octal = "077";

var hexa = "3F";

console.log(parseInt(binario, 2) +" en binario " + binario);

console.log(parseInt(octal, 8) + " en octal: " + octal );

console.log(parseInt(hexa, 16) + " en hexadecimal " + hexa);

encodeURI() /decodeURI()
Este par de funciones codifican o decodifican cadenas de caracteres.
Así encode tTraduce a codigo UTF8 todos que no sean: letras digitos, signos de puntuación ingleses (punto y como, como, cierre de interrogación cierre de admiración) /  @ & = + $, - _ ~ * ' ( ) # .
Decode hace lo contario.
Se suele usar para codificar/decodificar direcciones de internet, direcciones que pueden poseer caracters como espacios, apertura de interrogación o admiración, caracteres nacionales...
 
 

var acceso = "https://example.com/lista de ejemplos¿";

var codificado;

codificado = encodeURI(acceso)

console.log(codificado);

console.log(decodeURI(codificado));

encodeURIComponet() / decodeURIComponent()
Es parecido a encodeURI(), pero en este caso codifica absolutament todo excepto caracteres alfanuméricos y los simbolos: - _ . ! ~ * ' ( )
Está penesada para trabajar con la parte de una URI que no contenga la parte del servidor, solo la drección de un recurso o el query de la petición de una URL.

var acceso = "https://example.com/lista de ejemplos¿";

var codificado;

codificado = encodeURIComponent(acceso)

console.log(codificado);

console.log(decodeURIComponent(codificado));

Observa la difrencia con el ejemplo anterior, ahora codifica también la / (barra invertida) y los : (dos puntos)

Resumen

Las funciones predefinidas por porcionadas por Javascript son funciones pertenecientes al objeto global Object.

Tienen un ámbito global y pueden ser invocadas desde cualquier parte de un programa.

Un objeto puede sobreescribir cualquiera de estas funciones como un método propio, como ocurre con isNan en el objeto number.