Indexed string pseudo properties and for-in, was RE: Comments on April ES5 final draft standard tc39-2009-025

# Allen Wirfs-Brock (16 years ago)

As currently specified, they are to be enumerated by for-in. This is intentional and I believe we discussed it at some past TC-39 meeting. If we are treating the string characters as indexible readonly properties then for-in-ing over them seems like a perfectly reasonable thing to do. This is one of the advantages of using [[GetOwnProperty]] in this manner rather than trying to support direct string indexing using some other specification mechanism -- they just naturally integrate into property access anywhere it occurs in the specification.

-----Original Message----- From: es5-discuss-bounces at mozilla.org [mailto:es5-discuss- bounces at mozilla.org] On Behalf Of Mark S. Miller ...

# Mark S. Miller (16 years ago)

On Mon, Apr 27, 2009 at 5:28 PM, Allen Wirfs-Brock <Allen.Wirfs-Brock at microsoft.com> wrote:

As currently specified, they are to be enumerated by for-in. This is intentional and I believe we discussed it at some past TC-39 meeting. If we are treating the string characters as indexible readonly properties then for-in-ing over them seems like a perfectly reasonable thing to do.  This is one of the advantages of using [[GetOwnProperty]] in this manner rather than trying to support direct string indexing using some other specification mechanism -- they just naturally integrate into property access anywhere it occurs in the specification.

I'm happy with that, so long as it's consistent with the definition of for-in. However, the only relevant text I could find in for-in is

Let P be the name of the next property of obj whose [[Enumerable]] attribute is true. If there is no such property, return (normal, V, empty).

Since these indexes are not actually properties of strings, this text is insufficient.

# Allen Wirfs-Brock (16 years ago)

You may be right, that an additional note is warranted. However, being in a contentious mood I'll also argue that these are indeed properties of string objects. If [GetOwnProperty] says P is a property that then it really is one. In other words: P is the name of a own property of O iff O.[GetOwnProperty] is not undefined that is pretty much exactly how Object.prototype.hasOwnProperty(V) is defined.

The hole in the spec. seems to be that a few places (for-in, Object.keys, etc.) we use informal language to enumerate an object's properties. We probably need a more formal definition that incorporates the above rule.

Allen

-----Original Message----- From: Mark S. Miller [mailto:erights at google.com] Sent: Monday, April 27, 2009 6:59 PM To: Allen Wirfs-Brock Cc: es5-discuss at mozilla.org; es-discuss at mozilla.org Subject: Re: Indexed string pseudo properties and for-in, was RE: Comments on April ES5 final draft standard tc39-2009-025

...