Understanding Arrays and enumeration

C

Christopher T King

Reading through the ECMAScript spec, it seems that this code:

o = Object()
o['a'] = 5
o['b'] = 6
o['c'] = 7
for (var i in o) print(i);

should result in 'a', 'b', and 'c' being printed (not necessarily in that
order), and this is indeed the outcome. However, it also seems that this
code:

o = Array()
o[0] = 5
o[1] = 6
o[2] = 7
for (var i in o) print(i);

should result in 0, 1, and 2 being printed. However, this is not the
case: 5, 6, and 7 are instead printed.

I know these results are intuitively correct, but I can't find anything in
the ECMA spec making this distinction for Arrays. The for (i in o)
construction is defined to enumerate the properties of o, not the values
of those properties, and an array assignment o[n] = x is defined to assign
the value x to the property n of the object o.

Am I missing something in the spec, is the implementation I'm using (njs)
in error, or is this a discrepancy between JavaScript and ECMAScript?

Thanks in advance.
 
L

Lasse Reichstein Nielsen

....
o = Array()
o[0] = 5
o[1] = 6
o[2] = 7
for (var i in o) print(i);

should result in 0, 1, and 2 being printed. However, this is not the
case: 5, 6, and 7 are instead printed.

Testing in a browser (changing "print" to "alert", since "print" will
print the page) gives me 0, 1 and 2.

What are you using for executing the code (browser/non-browser
environment)? Are you *sure* that is the code you are running?
Am I missing something in the spec, is the implementation I'm using (njs)
in error, or is this a discrepancy between JavaScript and ECMAScript?

JavaScript (the scripting language in Netscape browsers) and JScript
(the scripting language in IE) are both ECMAScript compatible, and
have been the last several versions.


/L
 
C

Christopher T King

Testing in a browser (changing "print" to "alert", since "print" will
print the page) gives me 0, 1 and 2.

Okay, doing the same thing gets the same results for me too. It would
seem the interpreter I'm using is incorrect, then.
What are you using for executing the code (browser/non-browser
environment)? Are you *sure* that is the code you are running?

I'm using njs (http://www.njs-javascript.org/). It's a standalone
interpreter designed for embedding in other applications.
JavaScript (the scripting language in Netscape browsers) and JScript
(the scripting language in IE) are both ECMAScript compatible, and
have been the last several versions.

But it seems that njs is not, at least in this area ;)

Thanks a lot!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,432
Messages
2,571,682
Members
48,796
Latest member
Greg L.

Latest Threads

Top