Will `for (var a of null) {}` throw an error?

Gary Guo nbdd0121 at hotmail.com
Mon Dec 22 16:32:35 PST 2014




Actually I propose a change in texts in the specification.
>CheckIterable ( obj )>1. If obj is `undefined` or `null`, then return `undefined`.>2. If type(obj) is Object, then return Get(obj, @@iterator).>3. Let box be ToObject(obj).>4. ReturnIfAbrupt(box).>5. Return the result of calling the [[Get]] internal method of box passing @@iterator and obj as the arguments.
This is way more too complex. We know that there are three situation:1. obj is `undefined` or `null`2. obj is of a primitive type3. obj is an object
In 1, we don't care if it returns undefined or throw a TypeError. In ES6 spec, there are two uses of the undefined returned. One of them passes it as F to Call, the other passes it to ToObject. Both of them will result in TypeError. So we can just let this step throw TypeError instead of return `undefined`.
I suggest we can a little bit combine these steps:
>CheckIterable (obj)>1. Let box be ToObject(obj).>2. ReturnIfAbrupt(box).>3. Return the result of calling the [[Get]] internal method of box passing @@iterator and obj as the arguments.
If obj is `undefined` or `null`, the first step will fail and throw TypeError. If obj is primitive, it's boxed. If obj is an object, it is no-op in ToObject.




 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20141223/321117a3/attachment.html>


More information about the es-discuss mailing list