JSエンジンは実際に(関数宣言のような)オブジェクトを等価とどのように比較しますか?javascriptの関数の等価性
実際にオブジェクト参照が異なっていることを決定するために舞台裏で何が起こっているのかvar f1 = function(){};
var f2 = function(){};
console.log(f1 === f2); //false
?メモリの場所を比較していますか?
JSエンジンは実際に(関数宣言のような)オブジェクトを等価とどのように比較しますか?javascriptの関数の等価性
実際にオブジェクト参照が異なっていることを決定するために舞台裏で何が起こっているのかvar f1 = function(){};
var f2 = function(){};
console.log(f1 === f2); //false
?メモリの場所を比較していますか?
関数はオブジェクトです。
オブジェクトのインスタンスが異なる(または非strict)ことはありません。ポインタによって適用
厳密な等価:
var a = b = {}, c = {};
console.log(a === b, a === c); // true false
彼らは厳密には厳密に同じではありません。 – Pointy
@Pointy、私は 'toString'のようなメソッドについては褒められませんが、真実のようです。 =) –
==
チェック値が可変型または戻り型
===
チェックする場合
var foo = function() {
a = 1;
};
var bar = function() {
a = 1;
};
alert(foo.toString() == bar.toString());
これはtrueを返します。
はい、実際のオブジェクト自体ではなく、翻訳された 'string'値を単に比較しています。 – Mike
@Mikeは正しいです。これはOPの質問とは関係ありません。 – rgoliveira
また、グローバルな 'a'への代入を削除することでコードを最適化することができます –
'new Object()=== new Object()'を期待していない場合は、 'new Function()=== new Function()'を期待するのはなぜですか? – zzzzBov
あなたの編集を見ただけです。ナッツの殻では、はい、それはメモリの場所を比較しています。 – Mike