Как правильно проверить на равенство строк в JavaScript? - PullRequest
748 голосов
/ 27 августа 2010

Как правильно проверить равенство строк в JavaScript?

Ответы [ 8 ]

568 голосов
/ 27 августа 2010

всегда До тех пор, пока вы полностью не поймете различия и последствия использования операторов == и ===, используйте оператор ===, поскольку это спасет вас от неясности ( неочевидные) ошибки и WTF. «Обычный» оператор == может привести к очень неожиданным результатам из-за приведения типов внутри, поэтому использование === всегда является рекомендуемым подходом.

Для понимания этого и других «хороших и плохих» частей Javascript читайте о Дугласе Крокфорде и его работе. В Google Tech Talk есть отличная информация: http://www.youtube.com/watch?v=hQVTIJBZook


Обновление:

Серия You Not Know JS от Kyle Simpson превосходна (и бесплатна для чтения в Интернете). Эта серия статей посвящена часто неверно понимаемым областям языка и объясняет «плохие стороны», которые Крокфорд предлагает вам избежать. Поняв их, вы сможете правильно их использовать и избежать ловушек.

Книга " Up & Going " включает в себя раздел Равенство , в котором содержится конкретное описание того, когда использовать свободный (==) против строгого (===) операторы:

Чтобы свести множество деталей к нескольким простым выносам и помочь вам узнать, использовать ли == или === в различных ситуациях, вот мои простые правила:

  • Если какое-либо значение (также известное как сторона) в сравнении может быть значением true или false, избегайте == и используйте ===.
  • Если любое из значений в сравнении может иметь эти конкретные значения (0, "" или [] - пустой массив), избегайте == и используйте ===.
  • В во всех других случаях вы можете безопасно использовать ==. Это не только безопасно, но и во многих случаях упрощает ваш код таким образом, чтобы улучшить читаемость.

Я все еще рекомендую выступление Крокфорда для разработчиков, которые не хотят тратить время на то, чтобы по-настоящему понять Javascript - это хороший совет для разработчика, который лишь изредка работает в Javascript.

180 голосов
/ 27 августа 2010

Если вы знаете, что они являются строками, тогда нет необходимости проверять тип.

"a" == "b"

Однако обратите внимание, что строковые объекты не будут равны.

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

вернетfalse.

Вызовите метод valueOf () для преобразования его в примитив для объектов String,

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

вернет true

48 голосов
/ 02 мая 2017

Только одно дополнение к ответам: если все эти методы возвращают false, даже если строки кажутся равными, возможно, что есть пробел слева или справа от одной строки.Итак, просто поставьте .trim() в конце строки, прежде чем сравнивать:

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

Я потерял часы, пытаясь понять, что не так.Надеюсь, это кому-нибудь поможет!

16 голосов
/ 27 июля 2016

что привело меня к этому вопросу: padding и white-spaces

проверьте мой случай

 if (title === "LastName")
      doSomething();

и название было " LastName"

enter image description here

, поэтому, возможно, вам придется использовать trim функцию, подобную этой

var title = $(this).text().trim();
13 голосов
/ 22 октября 2015

Если вы действительно не знаете, как работает принуждение, вам следует избегать == и использовать вместо него оператор идентификации ===. Но вы должны прочитать это, чтобы понять, как оно работает .

Если вы используете ==, вы позволяете языку выполнять какое-либо приведение типов, например:

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

Как сказал Дуглас Крокфорд в своей книге:

Всегда лучше использовать оператор идентификации.

11 голосов
/ 02 мая 2015

На самом деле есть два способа сделать строки в javascript.

  1. var str = 'Javascript'; Это создает примитивное строковое значение.

  2. var obj = new String('Javascript'); Это создает объект-оболочку типа String.

    typeof str // string
    typeof obj // object

Так что лучший способ проверить на равенствоиспользует оператор ===, поскольку он проверяет значение, а также тип обоих операндов.

Если вы хотите проверить равенство между двумя объектами, тогда использование String.prototype.valueOf является правильным способом.

new String('javascript').valueOf() == new String('javascript').valueOf()
3 голосов
/ 04 июля 2018

Строка Objects можно проверить с помощью JSON.stringyfy() трюка.

var me = new String("me");
var you = new String("me");
var isEquel = JSON.stringify(me) === JSON.stringify(you);
console.log(isEquel);
0 голосов
/ 24 октября 2018

Я придумал альтернативное решение во время тестирования.Вы можете использовать функцию для прототипа строки.

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 
 //value

отлично работает в браузерах Chrome

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...