Created
November 27, 2012 22:53
-
-
Save dherman/4157754 to your computer and use it in GitHub Desktop.
fun with JS arrays
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var a = []; | |
a[Math.pow(2, 32) - 2] = "max index"; // highest non-expando indexed property | |
console.log(a.length === Math.pow(2, 32) - 1); // true | |
try { | |
a.push("whoa", "EVEN MOAR WHOA"); | |
} catch (e) { | |
console.log(e instanceof RangeError); // true | |
} | |
console.log(a.length === Math.pow(2, 32) - 1); // true | |
console.log(a[Math.pow(2, 32) - 1] === "whoa"); // true | |
console.log(a[Math.pow(2, 32)] === "EVEN MOAR WHOA"); // true |
It's an out of memory error. The attempt to format the exception string means you call 'toString' on the array, but the string representation is around 2 billion commas which isn't going to work. I filed http://code.google.com/p/v8/issues/detail?id=2431 for you
As for the initial comment, see https://bugs.ecmascript.org/show_bug.cgi?id=131
@erikcorry Thank you for the bug report, I should have done that immediately.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Another weird thing: invoking an unknown method on this "full" array crashes the tab in Chromium (25) instead of throwing a TypeError