slice y
substring funcionan de manera diferente internamente pero en la practica devuelven el mismo resultado con algunas excepciones bastante raras (navegadores diferentes).
La diferencia entre
substring y
substr es el segundo parámetro. En
substring, es el index (o numero de carácter) sobre el que parar. En
substr, el segundo parámetro es la longitud máxima de la cadena a devolver.
Dicho esto, lo recomendable de todas ellas es usar
slice o
substr.
Respecto a tu segunda duda... lo que hace es reemplazar una cadena por otra, dentro de un texto.
Linea 5: Por cada carácter de la cadena completa...
Linea 7: Si dicho carácter + los caracteres que siguen (durante la longitud de la cadenaVieja) son iguales a cadenaVieja...
Linea 10: CadenaCompleta es igual a cadenaCompleta hasta donde encontramos el primer carácter de cadenaVieja + cadenaNueva + cadenaCompleta desde donde encontramos el ultimo carácter de cadenaVieja.
Todo esto se basa en un index de caracteres dentro de cadenas de texto.
Supongamos que tienes la cadena:
hola mundoLos index serian respectivamente:
0 = h
1 = o
2 = l
3 = a
4 =
5 = m
6 = u
7 = n
8 = d
9 = o
Empieza desde el 0 porque todo en la informática empieza desde 0. En algunas ocasiones, un caracter puede equivaler a múltiples index dado que su codificación así lo require.. pero eso ya es otro tema.
Entonces, si yo con la anterior cadena, hago un
slice:
var cadena = 'hola mundo';
var primera = cadena.slice(0, 4);
Obtendré, "hola" dado que le estoy diciendo: Corta la cadena desde la posición 0 (primer carácter) hasta la posición 4 (recuerda, incluido el 0 (5))
De la misma forma, si hago
cadena.slice(5, 10), obtendré "mundo" porque empiezo en el caracter 5 y termino en la posición (recuerda, incluido el 0) 10.
En cambio, con
substrSi hago
cadena.substr(0, 4), obtendré "hola", y lo que le estaría indicando es: Corta la cadena desde la posición 0 hasta las próximas 4 posiciones como mucho.
El resultado aquí seria igual pero en el caso de la palabra mundo, no. Dado que si hago
cadena.substr(5, 5) me devolverá "mundo" ya que le estoy diciendo que corte desde la posición 5 hasta los próximos 5 caracteres.
Saludos