最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

JavaScript: Use Object As Array - Stack Overflow

programmeradmin4浏览0评论

Are there any pitfalls to code like this?

var Foo = function() {
    this.bar = function() { return 'bar'; };
};

var f = new Foo();
f[0] = 'hi';
f[1] = 'there';

Note that I'm creating a new function object with some misc properties, and then I'm treating the object like an array. Also how are the array values being stored in the object? Are 0 and 1 treated like property names?

Are there any pitfalls to code like this?

var Foo = function() {
    this.bar = function() { return 'bar'; };
};

var f = new Foo();
f[0] = 'hi';
f[1] = 'there';

Note that I'm creating a new function object with some misc properties, and then I'm treating the object like an array. Also how are the array values being stored in the object? Are 0 and 1 treated like property names?

Share Improve this question asked Oct 22, 2010 at 4:23 mellowsoonmellowsoon 23.4k19 gold badges58 silver badges76 bronze badges 1
  • As long as you don't have a length-property no one will confuse your object with an array. – some Commented Oct 22, 2010 at 4:49
Add a ment  | 

3 Answers 3

Reset to default 8

Well, yes, 0, and 1 will be just two property names.

When you assign a property with the bracket notation, the expression between the brackets will be converted to String, and that string will be used as the property name.

In fact, even the indexes for real arrays are just that, properties:

var realArray = ['a'];
realArray.hasOwnProperty('0'); // true

The difference is that real array objects on every property assignment that correspond to a valid index[1], track internally the value of their length property.

That's one of the reasons why "subclassing" array objects is difficult, even with the new ECMAScript 5 extensions, or at the moment also with the proposed ECMAScript-Harmony Proxies 2 3, can't be pletely done, in a stanard way.

That can be a problem, depending on how you plan to iterate the numeric properties.

If you enumerate the properties with the for-in statement, other members will appear, not just the numeric properties.

[1] A valid array index is any unsigned 32-bit integer in the range of 0 to (2^32)-1.

I think you might have problems if you try to loop through that with a for in loop; the loop will also get bar. There are ways around this, so you just have to be careful.

If you want to extend Array behavious please use : Array.prototype.yourfunc = function()....

发布评论

评论列表(0)

  1. 暂无评论