Let’s take an example String:
const location = 'Regent Street, London, England';
We want to search our String to see if 'London'
exists in it, and perhaps do something with it if there’s a match.
For this, we can use indexOf
(which exists on String.prototype
):
const index = location.indexOf('London');
// 15
console.log(index);
Here we’ve used indexOf('London')
to search our String for a match!
Our logged result is 15
, which means there was a match. The indexOf
method will always return -1
if there was no match. IndexOf always returns a number.
Free eBook
Directives, simple right? Wrong! On the outside they look simple, but even skilled Angular devs haven’t grasped every concept in this eBook.
- Observables and Async Pipe
- Identity Checking and Performance
- Web Components <ng-template> syntax
- <ng-container> and Observable Composition
- Advanced Rendering Patterns
- Setters and Getters for Styles and Class Bindings
IndexOf allows us to search a string in JavaScript for a match.
So what is this number being returned to us? It’s the index of the first character’s position when there is a match. So how do we use it?
Typically we would use indexOf
combined with a conditional statement - but before we go there, consider this example:
const string = 'abcdef';
const index = string.indexOf('a');
// 0
console.log(index);
It returns zero! That means if we did this:
if (index) {...}
… and fatefully assumed this would work across all numbers, we would be greeted with a nice bug - because 0
is a falsy value whereas all other numbers, even negative, are truthy values.
To filter out this behaviour, and lock in some safety, it’s common that we’d do something like this:
if (index !== -1) {...}
You could also be more fancy and use the bitwise operator ~
which ensures any 0
values are coerced to -1
meaning they result in false
. This gives us a way of calculating whether something is true
- meaning _all indexOf
matches will now result to true
and -1
will result in false
- yay:
if (!!~index) {...}
Personally I would use the second approach on personal projects because I like the syntax, it’s clean and I get it. On a bigger project you may want to standardise usage with your team.
Altogether our code can look like so:
const location = 'Regent Street, London, England';
// 15
const index = location.indexOf('London');
// true
const existsInString = !!~index;
if (existsInString) {
console.log(`Yes, "London" exists in "${location}"`);
}
Give the live demo a try:
If you are serious about your JavaScript skills, your next step is to take a look at my JavaScript courses, they will teach you the full language, the DOM, the advanced stuff and much more!