2016-08-26 5 views
3

JSエンジンは実際に(関数宣言のような)オブジェクトを等価とどのように比較しますか?javascriptの関数の等価性

実際にオブジェクト参照が異なっていることを決定するために舞台裏で何が起こっているのか
var f1 = function(){}; 
var f2 = function(){}; 

console.log(f1 === f2); //false 

?メモリの場所を比較していますか?

+2

'new Object()=== new Object()'を期待していない場合は、 'new Function()=== new Function()'を期待するのはなぜですか? – zzzzBov

+0

あなたの編集を見ただけです。ナッツの殻では、はい、それはメモリの場所を比較しています。 – Mike

答えて

4

関数はオブジェクトです。
オブジェクトのインスタンスが異なる(または非strict)ことはありません。ポインタによって適用

厳密な等価:

var a = b = {}, c = {}; 
console.log(a === b, a === c); // true false 
+1

彼らは厳密には厳密に同じではありません。 – Pointy

+0

@Pointy、私は 'toString'のようなメソッドについては褒められませんが、真実のようです。 =) –

-1

==チェック可変型または戻り型

とともに等しい場合 は等しい

===チェックする場合

1
var foo = function() { 
    a = 1; 
}; 

var bar = function() { 
    a = 1; 
}; 

alert(foo.toString() == bar.toString());​ 

これはtrueを返します。

+1

はい、実際のオブジェクト自体ではなく、翻訳された 'string'値を単に比較しています。 – Mike

+0

@Mikeは正しいです。これはOPの質問とは関係ありません。 – rgoliveira

+0

また、グローバルな 'a'への代入を削除することでコードを最適化することができます –