Yes, objects and arrays have storage restrictions. They are large enough to be theoretical for most purposes. You will be more limited by the virtual machine than by the language.
In your particular case (sending thousands of items to the client), you will encounter the same problem, whether it be JSON, JavaScript, or plain text on a JSP page: client memory. The client is much more likely to run out of system memory than you are faced with a language restriction. For thousands of small objects this should not be a problem.
Arrays have a limit of 4.2 billion elements , shown in the specification in 15.4.2.2 , for example. This is because the length is a 32-bit counter. Assuming each element is a single integer that allows you to store 16 GB of numeric data in a single array.
The semantics of objects are more complicated, but most functions for working with objects end up using arrays, so in most practical scenarios you are limited to 4.2 billion keys. Again, this is more than 16 GB of data, not counting the overhead for storing links.
The VM, and probably the garbage collector, will start hanging for a long time long before you get closer to the boundaries of the language. Some implementations will have less restrictions, especially older or interpreters. Since in most cases the JS specification does not define minimum limits, they can be defined and can be much lower ( this question is about the maximum number of arguments that are discussed).
With a good optimizing virtual machine that tries to keep track of the structures you use with this size will cause enough overhead that the VM is likely to return to using maps for your objects (it is theoretically possible to define a structure that represents a lot of data, but not very practical). Maps have a small amount of overhead, and the search time increases longer as the size increases, so you will see the performance implications: just not for any reasonable size of the object.
If you run into a different limit, I suspect that it will be 65k elements (2 ^ 16), as discussed in this answer . Finding an implementation that supports less than 65K Elements seems unlikely since most browsers were written after 32-bit architectures became the norm.