Siendo bastante nuevo en JavaScript, no puedo discernir cuándo usar cada uno de estos.
¿Alguien puede ayudar a aclarar esto para mí?
Siendo bastante nuevo en JavaScript, no puedo discernir cuándo usar cada uno de estos.
¿Alguien puede ayudar a aclarar esto para mí?
Respuestas:
Si necesita una expresión regular, use search()
. De lo contrario, indexOf()
va a ser más rápido.
search
evaluará una cadena en una expresión regular, incluso si no lo desea.
La función de búsqueda ( una descripción aquí ) toma una expresión regular, que le permite comparar con patrones más sofisticados, cadenas que no distinguen entre mayúsculas y minúsculas, etc., mientras que indexOf ( una descripción aquí ) simplemente coincide con una cadena literal. Sin embargo, indexOf también le permite especificar un índice inicial.
IndexOf (): acepta literales de cadena u objetos de cadena pero no expresiones regulares. También acepta un valor entero basado en cero para comenzar su búsqueda, por ejemplo:
Search (): acepta tanto literales de cadena como objetos de cadena y expresiones regulares. Pero no acepta un índice para comenzar la búsqueda.
"baby/e/lephant".indexOf(m);
?
indexOf () y search ()
común en ambos
i) devuelve la primera aparición del valor buscado
ii) devuelve -1 si no se encuentra coincidencia
let str='Book is booked for delivery'
str.indexOf('b') // returns position 8
str.search('b') // returns position 8
especial en indexOf ()
i) puede dar la posición de búsqueda inicial como segundo argumento
str.indexOf('k') // 3
str.indexOf('k',4) // 11 (it start search from 4th position)
el valor de búsqueda puede ser una expresión regular
str.search('book') // 8
str.search(/book/i) // 0 ( /i =case-insensitive (Book == book)
La búsqueda encuentra coincidencias con una expresión regular, pero no tiene compensaciones. IndexOf usa literales para hacer coincidir, pero tiene un desplazamiento.
Sin una expresión regular , no hay diferencia práctica entre indexOf y search .
El siguiente ejemplo ofrece una demostración en 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>
search
convierte una cadena en un RegExp
, por ejemplo, str.search("d........e");
también coincidirá con el carácter 39.