UNPKG

1.04 kBJavaScriptView Raw
1'use strict';
2var charAt = require('../internals/string-multibyte').charAt;
3var InternalStateModule = require('../internals/internal-state');
4var defineIterator = require('../internals/define-iterator');
5
6var STRING_ITERATOR = 'String Iterator';
7var setInternalState = InternalStateModule.set;
8var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);
9
10// `String.prototype[@@iterator]` method
11// https://tc39.es/ecma262/#sec-string.prototype-@@iterator
12defineIterator(String, 'String', function (iterated) {
13 setInternalState(this, {
14 type: STRING_ITERATOR,
15 string: String(iterated),
16 index: 0
17 });
18// `%StringIteratorPrototype%.next` method
19// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next
20}, function next() {
21 var state = getInternalState(this);
22 var string = state.string;
23 var index = state.index;
24 var point;
25 if (index >= string.length) return { value: undefined, done: true };
26 point = charAt(string, index);
27 state.index += point.length;
28 return { value: point, done: false };
29});