Show More
Commit Description:
merge
Commit Description:
merge
References:
File last commit:
Show/Diff file:
Action:
node_modules/es6-iterator/for-of.js
| 47 lines
| 1.3 KiB
| application/javascript
| JavascriptLexer
|
r789 | "use strict"; | |||
var isArguments = require("es5-ext/function/is-arguments") | ||||
, callable = require("es5-ext/object/valid-callable") | ||||
, isString = require("es5-ext/string/is-string") | ||||
, get = require("./get"); | ||||
var isArray = Array.isArray, call = Function.prototype.call, some = Array.prototype.some; | ||||
module.exports = function (iterable, cb /*, thisArg*/) { | ||||
var mode, thisArg = arguments[2], result, doBreak, broken, i, length, char, code; | ||||
if (isArray(iterable) || isArguments(iterable)) mode = "array"; | ||||
else if (isString(iterable)) mode = "string"; | ||||
else iterable = get(iterable); | ||||
callable(cb); | ||||
doBreak = function () { | ||||
broken = true; | ||||
}; | ||||
if (mode === "array") { | ||||
some.call(iterable, function (value) { | ||||
call.call(cb, thisArg, value, doBreak); | ||||
return broken; | ||||
}); | ||||
return; | ||||
} | ||||
if (mode === "string") { | ||||
length = iterable.length; | ||||
for (i = 0; i < length; ++i) { | ||||
char = iterable[i]; | ||||
if (i + 1 < length) { | ||||
code = char.charCodeAt(0); | ||||
if (code >= 0xd800 && code <= 0xdbff) char += iterable[++i]; | ||||
} | ||||
call.call(cb, thisArg, char, doBreak); | ||||
if (broken) break; | ||||
} | ||||
return; | ||||
} | ||||
result = iterable.next(); | ||||
while (!result.done) { | ||||
call.call(cb, thisArg, result.value, doBreak); | ||||
if (broken) return; | ||||
result = iterable.next(); | ||||
} | ||||
}; | ||||