2014-12-05 4 views
2

Смотрите следующие сравнения:Сравнение строк с Javascript

("a" == "a") 
true 

(/a/ == /a/) 
false 

Почему я получаю разные результаты со следующими выражениями?

EDIT:

Теперь я использую только == и по-прежнему получать те же результаты.

+3

Второй не соответствует строкам. Строковое совпадение будет ''/a/"=="/a/"' для этого. – Mritunjay

ответ

4

undefined, null, Numbers, Strings литералов и Booleans типы значений в JavaScript.

Таким образом, они будут сравниваться с их значения в отличии от RegExp (или любого другого объекта в этом отношении), который является объектом, где сравнение происходит на основании ссылки. Так "a" == "a" вернется true, потому что значения являются же но /a/ == /a/ возвратит false потому что ссылки отличаются.

6

Литерал /a/ не является строкой, это объект регулярного выражения. Нет двух объектов: ===.

+7

Два экземпляра объекта всегда! = Друг другу, даже если они одного типа и имеют все свои соответствующие свойства. – Igor

+4

@ReginaFlats просто попробуйте 'typeof/a /', вы получите ответ. – Kai

+3

Объектные экземпляры равны только в том случае, если они являются одним и тем же экземпляром. Вы можете сделать 'var a =/a /;', а затем 'a === a' или' a == a' истинны. – Thilo

Смежные вопросы