像这样的代码有任何陷阱吗?
var Foo = function() {
this.bar = function() { return 'bar'; };
};
var f = new Foo();
f[0] = 'hi';
f[1] = 'there';
Run Code Online (Sandbox Code Playgroud)
请注意,我正在创建一个具有一些misc属性的新函数对象,然后我将对象视为一个数组.如何将数组值存储在对象中?0和1是否像属性名一样对待?
嗯,是的,0并且1只是两个属性名称.
使用括号表示法指定属性时,括号之间的表达式将转换为String,并且该字符串将用作属性名称.
事实上,即使是指数的实际阵列是正义的,属性:
var realArray = ['a'];
realArray.hasOwnProperty('0'); // true
Run Code Online (Sandbox Code Playgroud)
区别在于每个属性赋值上的实数数组对象对应于有效索引[1],在内部跟踪其length属性的值.
这就是为什么"子类化"数组对象很困难的原因之一,即使使用新的ECMAScript 5扩展,或者目前也提出ECMAScript-Harmony Proxies 2 3,也无法以标准的方式完成.
这可能是一个问题,具体取决于您计划如何迭代数字属性.
如果使用该for-in语句枚举属性,则将显示其他成员,而不仅仅是数字属性.
[1]有效数组索引是0到(2 ^ 32)-1范围内的任何无符号32位整数.
| 归档时间: |
|
| 查看次数: |
1288 次 |
| 最近记录: |