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.
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss