| /* Any copyright is dedicated to the Public Domain. |
| * http://creativecommons.org/licenses/publicdomain/ */ |
| |
| // The third argument to Array.from is passed as the 'this' value to the |
| // mapping function. |
| var hits = 0, obj = {}; |
| function f(x) { |
| assertEq(this, obj); |
| hits++; |
| } |
| Array.from(["a", "b", "c"], f, obj); |
| assertEq(hits, 3); |
| |
| // Without an argument, undefined is passed... |
| hits = 0; |
| function gs(x) { |
| "use strict"; |
| assertEq(this, undefined); |
| hits++; |
| } |
| Array.from("def", gs); |
| assertEq(hits, 3); |
| |
| // ...and if the mapping function is non-strict, that means the global is |
| // passed. |
| var global = this; |
| hits = 0; |
| function g(x) { |
| assertEq(this, global); |
| hits++; |
| } |
| Array.from("ghi", g); |
| assertEq(hits, 3); |
| |
| // A primitive value can be passed. |
| for (var v of [0, "str", undefined]) { |
| hits = 0; |
| var mapfn = function h(x) { |
| "use strict"; |
| assertEq(this, v); |
| hits++; |
| }; |
| Array.from("pq", mapfn, v); |
| assertEq(hits, 2); |
| } |
| |
| if (typeof reportCompare === 'function') |
| reportCompare(0, 0); |