En Javascript existen varias formas de saber si un parte, o todo el string está contenido dentro de otros Strings.

Usando includes

Esta es la opción que yo recomiendo y suelo usar. Está soportada en los principales navegadores, aunque tienes que saber que en Internet Explorer no funciona (¿quién usa IE hoy en día? ah, sí, las administraciones públicas por desgracia).

Usarlo es muy sencillo, tan solo llamas al método de includes y listo, devuelve directamente variables de tipo Booleans 🚧. Veamos un ejemplo:

const title = "Hello";
const subtitle = "Hello world!";
const description = "Welcome to my page!" 

console.log(subtitle.includes(title)); // true
console.log(description.includes(title)); // false

La primera comprobación devuelve true y la segunda false. Ojo al detalle, se ejecuta la variable sobre la que quieres comprobar si existe otro string.

Usando IndexOf

Esta era la forma tradicional de hacer esta comprobación. Si por desgracia tienes que trabajar en un proyecto que va a ser usado en Internet Explorer (good luck!) no te queda más remedio que usarla.

Ojito porque este método de los Strings no solo sirve para comprobar si existe un string dentro de otro, realmente lo que hace es devolver el índice en el que se encuentra el string que le pasas, y -1 en caso de no encontrarlo.

Por eso, comprobando si devuelve -1, podemos saber si el string está contenido dentro de otro:

const title = "Hello";
const subtitle = "Hello world!";
const description = "Welcome to my page!" 

console.log(subtitle.indexOf(title) !== -1); // true
console.log(description.indexOf(title) !== -1); // false

Pero eso, que indexOf para saber si un string está dentro de otro no se recomienda porque el método includes queda más claro, pero si justo necesitas saber el índice pues si que deberías usar este método.

Usando match

Match es otra forma que tienes de hacer esta comprobación. A diferencia de includes, lo que hace match es devolver un array con las coincidencias que ha encontrado, o null si no encuentra ninguna.

Realmente match como funciona y se usa es pasando Regex 🚧, osea que pasando un string directamente lo que hace es buscar todas las coincidencias.

const title = "Hello";
const subtitle = "Hello world!";
const description = "Welcome to my page!" 

console.log(subtitle.match(title)); // Array [ "Hello" ]
console.log(description.match(title)); // null

¿Y qué pasa si quieres un boolean en lugar del array con las coincidencias o null? Pues tienes que saber que Javascript tiene truthy y falsy values, es decir, el array con contenido Javascript lo puede interpretar como true y el null como false. Más info sobre esto en Truthy y Falsy values en Javascript 🚧

Es decir, que si directamente metes la comprobación dentro de Condicionales en Javascript 🚧 te va a funcionar perfectamente.

const title = "Hello";
const subtitle = "Hello world!";
const description = "Welcome to my page!" 

if (subtitle.match(title)) {
  console.log("La variable title está contenida dentro de la variable subtitle");
}

Yo recomiendo usar includes siempre que se pueda y el match en caso de que necesites la lista de coincidencias o necesites pasar una regex.