私は思考実験と少し混乱していました、そして今私はいくつかのアドバイスを探しています。ECMAscriptの参照とArray.prototype.indexOf()
メソッドについてです。
簡単に始めましょう:
var container = [ ];
// more code
container.push( 5 );
container.push( 7 );
container.push( 10 );
そこで、ECMAscript配列にいくつかの「プリミティブ値」をプッシュしました(そのステートメントが真であるかどうかにかかわらず、私は戻ってきます)、少なくともこれまでのところ、このように想像していました。への呼び出し
container.indexOf( 7 );
期待どおりに戻り1
ます。私が抱えている大きな問題は.indexOf()
、プリミティブ値を実際に比較するのか、それとも実際にNumber()
オブジェクトが作成されて保存され、その参照が比較されるのかということです。このように書き直すと、これはもう少し明白になります。
var a = 5,
b = 7,
c = 10;
var container = [ ];
container.push( a );
container.push( b );
container.push( c );
container.indexOf( b );
この時点までは、値を比較するだけでよいと簡単に主張.indexOf()
できますが、次のようになります。
var a = { name: 'a', value: 5 },
b = { name: 'b', value: 10 },
c = { name: 'c', value: 15 };
var container = [ ];
// more code
container.push( a );
container.push( b );
container.push( c );
ここでは、そのコンテナ配列をオブジェクト参照で埋めましたが、それでも.indexOf()
期待どおりに機能します
container.indexOf( b ) // === 1
このような呼び出し中に
container.indexOf({ name: 'b', value: 10 });
-1
新しいオブジェクトを作成して新しい参照を取得しているので、明らかに戻ります。したがって、ここでは、参照を相互に内部的に比較する必要がありますね。
ECMAscript仕様の天才の中には、それについての資料を確認したり、さらに適切にリンクしたりできますか?
これに関する副次的な質問は、lexicalEnvironmentまたはActivationObject内の内部に保存されたオブジェクト参照にアクセスする方法があるかどうかです。