は javascriptでは、なぜ{}!== Object()ですか?
var o = {};
var p = new Object();
p === o; //false
o.__proto__===p.__proto__ // true
なぜこれが偽の
を考えると?私は偽を返す理由を教えてくださいね??
は javascriptでは、なぜ{}!== Object()ですか?
var o = {};
var p = new Object();
p === o; //false
o.__proto__===p.__proto__ // true
なぜこれが偽の
を考えると?私は偽を返す理由を教えてくださいね??
オブジェクトis defined asため===
:
11.9.6比較
x
とy
が値であるx === y
、厳密な等価比較アルゴリズムは、
true
又はfalse
を生成します。以下のような比較が行われます。同じオブジェクトを参照true
x
場合とy
...
7.戻ります。それ以外の場合は、
false
を返します。
この場合、どちらも空のオブジェクトですが、これらは別々に作成されるため、同じオブジェクトを参照しません。
補足として、どちらの構成も同じことを行います。 {}
を使用するのが一般的な方法です。
2つのオブジェクトが同じこと(すなわち、何も)が含まれていますが、彼らは同じオブジェクトではありません。
JavaScriptのオブジェクト平等テストでは、2つのパラメータがと全く同じオブジェクトを参照する必要があります。
オブジェクトを作成するたびに、結果には独自の識別情報が割り当てられます。彼らはどちらも「空」であるにもかかわらず、彼らは同じことではありません。したがって、===
の比較結果はfalse
となります。 ===
を使用して
、結果は2つの項目を比較したいとあなたが同じタイプであれば、両方の側の項目は、「同じインスタンス」
であれば、あなたが使用する必要があります表示されます:
var o1 = {};
var o2 = new Object();
alert(typeof(o1) === typeof(o2));
と2つのオブジェクトが同等(プロパティと値)であると見なす場合は、underscore.jsライブラリを試して、isEqual
関数を使用する必要があります。
この宿題はありますか?その場合
、私はあなたにいくつかのヒントを与える: - 最初の2行は何をすべきか考えてみてください。 oとpは、その2つの行の後に同じオブジェクトを参照していますか? - 正確に何が起きているかを調べる。 2つのオブジェクトを比較して、構造が同じかどうかを確認しますか?あるいは、そのアイデンティティーに基づいてオブジェクトを比較しますか? 2つの式が同じオブジェクトを参照(そのため、通常の等号演算子はない)かどうかをオブジェクト試験用
JavaScriptの厳密な比較。
オブジェクトリテラル{}
を使用して最初のオブジェクトを作成すると、プロパティのない新しいオブジェクトが作成されます。
Object
コンストラクタを関数として呼び出すことによって、2番目のオブジェクトを作成します。 ECMAScript Language Specificationのセクション15.2.1.1によれば、これはちょうどnew Object()
が使用されたかのように新しいオブジェクトを作成します。
p
とo
に参照を格納し、p
とo
が同じオブジェクトを参照しているかどうかを確認します。彼らはしません。
オブジェクトはプリミティブ値を含むそれぞれが特性、オブジェクト、または機能の順不同の集合です。したがって、各オブジェクトにはプロパティとプロトタイプがあり、それを比較する意味はありません。
[Javascriptでは、\ [1、2 \] == \ [1,2:]または({a:1})==({a:1})の間違いはなぜですか?] ://stackoverflow.com/questions/7713794/in-javascript-why-is-1-2-1-2-or-a-1-a-1-false) –
"ポインタを理解することはスキルではありません。適性"。 "p"と "o"は異なるポインタであり、どちらも同じものです。 – georg
'p'と' o'が異なるポインタであっても、 '==='は依然として真です。重要なことは、2つのポインタが同じオブジェクトを指しているかどうかです。 –