Published at
Updated at
Reading time
2min
This post is part of my Today I learned series in which I share all my web development learnings.

Rodney Rehm recently tweeted about this function I have never heard of – String.prototype.localeCompare. And wow - it can be so useful.

  • Did you want to know if a string includes a given character sequence no matter if upper or lower case?
  • Did you ever come across the tricky problem of sorting strings that include numeric values?
'aBcD' === 'abcd' // false
'ábcd' === 'abcd' // false

'Price 2€'  > 'Price 1€'  // true
'Price 20€' > 'Price 3€' // false

Using localeCompare you can define several options that can help out here. According to MDN it returns the following value:

A negative number if the reference string occurs before the compare string; positive if the reference string occurs after the compare string; 0 if they are equivalent.

So let's have a look:

'aBcD'.localeCompare('abcd', undefined, { sensitivity: 'base' }) // 0 -> equal
'ábcd'.localeCompare('abcd', undefined, { sensitivity: 'base' }) // 0 -> equal

'Price 20€'.localeCompare('Price 3€', undefined, { numeric: true })  // 1
'Price 20€'.localeCompare('Price 3€', undefined, { numeric: false }) // -1

This can help to find out if strings have an equal base without fiddling around with numeric code points and sorting strings including numbers definitely comes in handy!

Update: as it turns out, everyone's most favorite JavaScript util (Intl) now supports a way to compare strings, too.

const stringCollator = new Intl.Collator("en", { sensitivity: "base" });
collator.compare('aBcD', 'abcd'); // 0 -> equal
collator.compare('ábcd', 'abcd'); // 0 -> equal

It looks like Collator() supports all of the localeCompare() options, apparently it's faster than the original string method and the best thing: it works in all modern browsers.

MDN Compat Data (source)
Browser support info for Collator()
chromechrome_androidedgefirefoxfirefox_androidsafarisafari_iossamsunginternet_androidwebview_android
242412295610101.524

Hooray!

If you enjoyed this article...

Join 5.8k readers and learn something new every week with Web Weekly.

Web Weekly — Your friendly Web Dev newsletter
Reply to this post and share your thoughts via good old email.
Stefan standing in the park in front of a green background

About Stefan Judis

Frontend nerd with over ten years of experience, freelance dev, "Today I Learned" blogger, conference speaker, and Open Source maintainer.

Related Topics

Related Articles