2016-08-24 8 views
1

以下に示すJavaScriptの同一性と等価演算子の奇妙な動作を理解したいと思います。JavaScriptでのオブジェクトの比較

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

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

すべての4つの変数abcdはオブジェクトです。しかし、それらを比較すると、最初のケースはfalseを返しますが、2番目のケースは真です。番号を除いて、上記の記事によればhttps://msdn.microsoft.com/en-us/library/d53a7bd4(v=vs.94).aspx

ブールすべては参照代わりの値で比較される。

は、私は、次のソースからの比較を検討しました。それで、最初のケースがどのようにfalseを返すのか、そして2番目のケースが真実を返します

+0

'だから、最初のケースは、まず、真の2つ目は、他の方法で回避をfalse.'返す方法falseで、二つ目は –

+3

文字列がプリミティブで真です。美しいJSの世界へようこそ。 –

+0

[StringはJavaScriptのプリミティブ型かオブジェクトですか?](http://stackoverflow.com/questions/7675127/is-string-a-primitive-type-or-object-in-javascript) –

答えて

1

cdwhich are primitive types in JavaScript and compared by value、文字列です。

このため、c == dtrueを返します。

この記事では、実際にオブジェクトを作成するコンストラクタを作成したstring objectsについて説明しています。この場合、参照は比較され、falseを返します。

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

0

A(プリミティブ)文字列は、数値型(数値など)です。そのように、===はその値(等価)を比較します。

オブジェクトは参照型で、===は同一性を比較します。

プリミティブ文字列とStringオブジェクト(new String("foo")で作成)の両方が存在するため、文字列はちょっと狂っています。


==それは「可能ならば物事が等しくする」ために型変換をないことを除いて===と同じように動作します。参照型の場合、これはプリミティブ文字列とStringオブジェクトに匹敵することを除いて===と同じです。あなたの例では

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

オブジェクトについての質問には答えません.... –

関連する問題