jAn*_*ndy 13 javascript arrays specifications reference ecmascript-5
我在思想实验上有点困惑,现在我正在寻找一些建议.它关于ECMAscript参考和Array.prototype.indexOf()方法.
让我们开始轻松:
var container = [ ];
// more code
container.push( 5 );
container.push( 7 );
container.push( 10 );
Run Code Online (Sandbox Code Playgroud)
所以现在我们将一些" 原始值 " 推入我们的ECMAscript数组中(无论这个陈述是否属实,我都会回来),至少到目前为止我还是想象它.打电话给
container.indexOf( 7 );
Run Code Online (Sandbox Code Playgroud)
将按1预期返回.我遇到的一个重要问题是,如果.indexOf()真的比较了原始值,或者实际上Number()是创建了一个对象,那么它的参考就会被比较.如果我们像这样重写它会变得更加明显:
var a = 5,
b = 7,
c = 10;
var container = [ ];
container.push( a );
container.push( b );
container.push( c );
container.indexOf( b );
Run Code Online (Sandbox Code Playgroud)
在此之前,人们仍然可以轻易地争辩说,所有.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 );
Run Code Online (Sandbox Code Playgroud)
在这里,我们用对象引用填充了该容器数组,并且仍按.indexOf()预期工作
container.indexOf( b ) // === 1
Run Code Online (Sandbox Code Playgroud)
而这样的电话
container.indexOf({ name: 'b', value: 10 });
Run Code Online (Sandbox Code Playgroud)
很明显,-1因为我们正在创建一个新对象并获得一个新的引用.所以在这里它必须在内部比较参考,对吧?
一些ECMAscript规范天才可以确认甚至更好地将我的一些材料与我联系起来吗?
关于这个问题的另一个问题是,是否有任何可能的方法来访问lexicalEnvironment和Activation对象中的内部存储的对象引用.
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |