2016-08-24 3 views
1

Я хотел бы понять странное поведение оператора JavaScript и оператора равенства, как показано ниже.Сравнение объектов в JavaScript

var a = {}; 
var b = {}; 
a === b; //false 
a == b; //false 

var c = ''; 
var d = ''; 
c === d; //true 
c == d; //true 

Все четыре переменные a, b, c и d являются объектами. Но, сравнивая их, первый случай дает false, а второй - true.

Я изучал сравнение со следующим источником: https://msdn.microsoft.com/en-us/library/d53a7bd4(v=vs.94).aspx

Согласно вышеуказанной статье, за исключением числа и булево все сравнивается со ссылкой вместо значения. Итак, как первый случай возвращает false, а второй - true.

+0

'Так как первый случай возвращает истину и второй один false.' наоборот, первая ложь, второе верно –

+3

Строки примитивы. Добро пожаловать в прекрасный мир JS. –

+0

Возможный дубликат [Является ли String примитивным типом или объектом в Javascript?] (Http://stackoverflow.com/questions/7675127/is-string-a-primitive-type-or-object-in-javascript) –

ответ

1

c и d в вашем примере являются строками, which are primitive types in JavaScript and compared by value.

По этой причине c == d возвращает true.

В статье речь идет о string objects, создавшем конструктор new String('foo'), который фактически создает объекты. В этом случае ссылки сравниваются, возвращая false.

console.log(new String('foo') == new String('foo')) // false 
 
console.log('foo' == 'foo')       // true

0

A (примитивная) строка - тип значения (например, Number). Таким образом, === сравнивает его значение (равенство).

Объекты являются ссылочными типами, а для них === сравнивает идентичность.

Строки немного сумасшедшие, поскольку существуют как примитивные строки, так и объекты String (созданные с помощью new String("foo")).


== работает точно так же, как === кроме того, что он делает преобразование типов, чтобы «сделать все равно, если это возможно». Для ссылочных типов это то же самое, что и ===, за исключением того, что он также обозначает примитивные строки и объекты String.

"abc" == new String("abc"); 
"abc" !== new String("abc"); 
+1

Это не отвечает на вопрос об объектах, хотя .... –

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