2017-01-29 7 views
3

Как вы можете видеть here я хочу transpile следующий код из ES6 в ES5 и использовать в качестве предварительных настроек «es2015»:Transpiling ES6 к ES5 онлайн с Вавилонской

let myString = "Whatever"; 
let myStringArray = Array.from (myString); 
console.log (myStringArray); 

Как вы знаете, нет «Array.from "в ES5, но переданный код по-прежнему содержит Array.from. Что я сделал не так?

+2

См https://babeljs.io/docs/usage/polyfill/. Вы не сделали ничего плохого, Бабель не переводит API. –

+0

спасибо, но я пробовал его в Интернете на игровой площадке Babel, и я хочу, чтобы он был переведен там, .. – Lonely

+0

Я обновил свой комментарий, что Babel не переполняет встроенные API. Насколько я могу судить, вы ничего не можете сделать в онлайн-инструменте. –

ответ

1

Включите этот код polyfill snippet над своим кодом, чтобы его можно было перевести на лету онлайн. Но для производства следует использовать babel-polyfill

// Production steps of ECMA-262, Edition 6, 22.1.2.1 
// Reference: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from 
if (!Array.from) { 
    Array.from = (function() { 
    var toStr = Object.prototype.toString; 
    var isCallable = function (fn) { 
     return typeof fn === 'function' || toStr.call(fn) === '[object Function]'; 
    }; 
    var toInteger = function (value) { 
     var number = Number(value); 
     if (isNaN(number)) { return 0; } 
     if (number === 0 || !isFinite(number)) { return number; } 
     return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number)); 
    }; 
    var maxSafeInteger = Math.pow(2, 53) - 1; 
    var toLength = function (value) { 
     var len = toInteger(value); 
     return Math.min(Math.max(len, 0), maxSafeInteger); 
    }; 

    // The length property of the from method is 1. 
    return function from(arrayLike/*, mapFn, thisArg */) { 
     // 1. Let C be the this value. 
     var C = this; 

     // 2. Let items be ToObject(arrayLike). 
     var items = Object(arrayLike); 

     // 3. ReturnIfAbrupt(items). 
     if (arrayLike == null) { 
     throw new TypeError("Array.from requires an array-like object - not null or undefined"); 
     } 

     // 4. If mapfn is undefined, then let mapping be false. 
     var mapFn = arguments.length > 1 ? arguments[1] : void undefined; 
     var T; 
     if (typeof mapFn !== 'undefined') { 
     // 5. else  
     // 5. a If IsCallable(mapfn) is false, throw a TypeError exception. 
     if (!isCallable(mapFn)) { 
      throw new TypeError('Array.from: when provided, the second argument must be a function'); 
     } 

     // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined. 
     if (arguments.length > 2) { 
      T = arguments[2]; 
     } 
     } 

     // 10. Let lenValue be Get(items, "length"). 
     // 11. Let len be ToLength(lenValue). 
     var len = toLength(items.length); 

     // 13. If IsConstructor(C) is true, then 
     // 13. a. Let A be the result of calling the [[Construct]] internal method of C with an argument list containing the single item len. 
     // 14. a. Else, Let A be ArrayCreate(len). 
     var A = isCallable(C) ? Object(new C(len)) : new Array(len); 

     // 16. Let k be 0. 
     var k = 0; 
     // 17. Repeat, while k < len… (also steps a - h) 
     var kValue; 
     while (k < len) { 
     kValue = items[k]; 
     if (mapFn) { 
      A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k); 
     } else { 
      A[k] = kValue; 
     } 
     k += 1; 
     } 
     // 18. Let putStatus be Put(A, "length", len, true). 
     A.length = len; 
     // 20. Return A. 
     return A; 
    }; 
    }()); 
} 
+0

O_o, большое спасибо, может быть, мне лучше остаться с TypeScript, .. – Lonely

+0

Вам лучше избегать TypeScript ... – NonPolynomial

+0

Я бы, если бы производительность была не так плохо (на момент написания). TypeScript транслирует/компилирует в ES5, и это заметно более эффективно, .. – Lonely

Смежные вопросы