Siendo bastante nuevo en JavaScript, no puedo discernir cuándo usar cada uno de estos.En JavaScript, ¿cuál es la diferencia entre indexOf() y search()?
¿Alguien puede ayudarme a aclarar esto?
Siendo bastante nuevo en JavaScript, no puedo discernir cuándo usar cada uno de estos.En JavaScript, ¿cuál es la diferencia entre indexOf() y search()?
¿Alguien puede ayudarme a aclarar esto?
Si necesita una expresión regular, use search()
. De lo contrario, indexOf()
será más rápido.
La función de búsqueda (one description here) toma una expresión regular, lo que le permite igualar contra patrones más sofisticados, las cadenas de mayúsculas y minúsculas , etc., mientras que indexOf (one description here) simplemente coincide con una cadena literal. Sin embargo, indexOf también le permite especificar un índice inicial.
La búsqueda encuentra que coincide con una expresión regular, pero no tiene desplazamientos. IndexOf usa literales para hacer coincidir, pero tiene un desplazamiento.
Buscar * does * return an offset. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search – rvighne
Sin regex, no hay ninguna diferencia práctica entre indexOf y search.
El ejemplo a continuación da una demo vivo:
function FromSearch() {
var str = document.getElementById("demo").innerText;
var n = str.search("difference");
document.getElementById("Location").innerHTML = n;
}
function FromindexOf() {
var str = document.getElementById("demo").innerText;
var n = str.indexOf("difference");
document.getElementById("Location").innerHTML = n;
}
<p id="demo">Without a <a href='http://www.w3schools.com/js/js_regexp.asp'>regex</a>, there is no practical difference between <a href='http://www.w3schools.com/jsref/jsref_indexof.asp'>indexOf</a> and <a href='http://www.w3schools.com/jsref/jsref_search.asp'>search</a>
</p>
<button onclick="FromSearch()">From search</button>
<button onclick="FromindexOf()">From indexOf</button>
<p>Location of difference in the above sentence is:</p>
<mark id="Location"></mark>
IndexOf() - acepta los literales de cadena o los objetos de cadena, pero no expresiones regulares. También acepta un valor entero de base cero para comenzar su búsqueda de, por ejemplo .:
Búsqueda(): acepta tanto literales de cadena como objetos de cadena y expresiones regulares. Pero no acepta un índice para comenzar la búsqueda.
¿Qué devuelve para '" baby/e/lephant ".indexOf (m);'? – RamenChef
bueno ... devolverá 4..porque/e/string está presente ... pero si quiere encontrar una expresión regular "e" no obtendrá el resultado deseado. UMM tal vez debería modificar mi respuesta a indexOf() para encontrar la expresión regular como una cadena literal y no como una expresión regular. – bablue
¿Alguna referencia para apoyar esta afirmación? – robisrob
Además, 'search' evaluará una cadena en una expresión regular aunque no lo desee. – cregox
El comentario de @ cregox es importante: intente '" hola. ". Search (". ")' - devuelve 0, no 5 porque '.'es el token de expresión regular para" cualquier carácter " – JoeRocc