What is the correct way to check for string equality in JavaScript?

What is the correct way to check for equality between Strings in JavaScript?



always Until you fully understand the differences and implications of using the == and === operators, use the === operator since it will save you from obscure (non-obvious) bugs and WTFs. The "regular" == operator can have very unexpected results due to the type-coercion internally, so using === is always the recommended approach.

For insight into this, and other "good vs. bad" parts of Javascript read up on Mr. Douglas Crockford and his work. There's a great Google Tech Talk where he summarizes lots of good info: http://www.youtube.com/watch?v=hQVTIJBZook


The You Don't Know JS series by Kyle Simpson is excellent (and free to read online). The series goes into the commonly misunderstood areas of the language and explains the "bad parts" that Crockford suggests you avoid. By understanding them you can make proper use of them and avoid the pitfalls.

The "Up & Going" book includes a section on Equality, with this specific summary of when to use the loose (==) vs strict (===) operators:

To boil down a whole lot of details to a few simple takeaways, and help you know whether to use == or === in various situations, here are my simple rules:

  • If either value (aka side) in a comparison could be the true or false value, avoid == and use ===.
  • If either value in a comparison could be of these specific values (0, "", or [] -- empty array), avoid == and use ===.
  • In all other cases, you're safe to use ==. Not only is it safe, but in many cases it simplifies your code in a way that improves readability.

I still recommend Crockford's talk for developers who don't want to invest the time to really understand Javascript—it's good advice for a developer who only occasionally works in Javascript.


If you know they are strings, then there's no need to check for type.

"a" == "b"

However, note that string objects will not be equal.

new String("a") == new String("a")

will return false.

Call the valueOf() method to convert it to a primitive for String objects,

new String("a").valueOf() == new String("a").valueOf()

will return true


Just one addition to answers: If all these methods return false, even if strings seem to be equal, it is possible that there is a whitespace to the left and or right of one string. So, just put a .trim() at the end of strings before comparing:

if(s1.trim() === s2.trim())
    // your code

I have lost hours trying to figure out what is wrong. Hope this will help to someone!


what led me to this question is the padding and white-spaces

check my case

 if (title === "LastName")

and title was " LastName"

enter image description here

so maybe you have to use trim function like this

var title = $(this).text().trim();

Unless you really know how coercion works, you should avoid == and use the identity operator === instead. But you should read this to understand how it works.

If you use ==, you let the language do some type coercion for you, so for example:

"1" == 1 // true
"0" == false // true
[] == false // true

As Douglas Crockford's said in his book:

It’s always better use the identity operator.


There are actually two ways in which strings can be made in javascript.

  1. var str = 'Javascript'; This creates a primitive string value.

  2. var obj = new String('Javascript'); This creates a wrapper object of type String.

    typeof str // string
    typeof obj // object

So the best way to check for equality is using the === operator because it checks value as well as type of both operands.

If you want to check for equality between two objects then using String.prototype.valueOf is the correct way.

new String('javascript').valueOf() == new String('javascript').valueOf()

String Objects can be checked using JSON.stringyfy() trick.

var me = new String("me");
var you = new String("me");
var isEquel = JSON.stringify(me) === JSON.stringify(you);


I came up with a alternative solution during testing. you can use function on the string prototype.

String.prototype.betwenStr = function(one){

return JSON.stringify(new String(this)) === JSON.stringify(new String(one));


 //call it
 "hello world".betweenStr("hello world"); //returns boolean 

works fine in chrome browsers


Considering that both strings may be very large, there are 2 main approaches bitwise search and localeCompare

I recommed this function

function compareLargeStrings(a,b){
    if (a.length !== b.length) {
         return false;
    return a.localeCompare(b) === 0;

The easiest way to do it is to use a ternary operator like so:

 "was" = "was" ? true : false

but if the string you want to compare is in an array, you'll use the es6 filter

let stringArray  = [men, boys, girls, sit, can, gotten]
stringArray.filter(I=> I === boys ? 
stringArray.pop(indexOf(I)) : null)

the above will check your stringArray and whatever string that matches it from the array which in our case we chose "boys"


You can use == or === but last one works in more simple way (src)

a == b (and its negation !=)

enter image description here

a === b (and its negation !==)

enter image description here


Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.