2016-10-01 2 views
3

[ "iife-wrap"] 플러그인이있는 ES6 + 바벨을 사용하고 있습니다.ES6에서 값 유형 가져 오기

이전에 작성한 (양식 유효성 검사) 플러그인을 다시 작성하려고합니다. 데이터가 객체인지 확인하려고합니다. typeof blah === 'object' 또는 내가 ES6에 넣어 그러나 경우 string, function, and etc.

:

은 ES5를 들어 이것은 단지이다. 오류가 발생합니다. 유형 오류 : _typeof는 함수가 아닙니다.

다음은 내 코드 샘플입니다.

let es6function =() => { 
    return 'asd'; 
} 

console.log(typeof es6function) 

class Person { 

} 

let tryThis = new Person() 
console.log(tryThis instanceof Person) 

ES5는 :

; 

(function() { 
    'use strict'; 

    function _classCallCheck(instance, Constructor) { 
     if (!(instance instanceof Constructor)) { 
      throw new TypeError("Cannot call a class as a function"); 
     } 
    } 

    var _typeof = typeof Symbol === "function" && _typeof(Symbol.iterator) === "symbol" ? function (obj) { 
     return typeof obj === 'undefined' ? 'undefined' : _typeof(obj); 
    } : function (obj) { 
     return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === 'undefined' ? 'undefined' : _typeof(obj); 
    }; 

    var es6function = function es6function() { 
     return 'asd'; 
    }; 

    console.log(typeof es6function === 'undefined' ? 'undefined' : _typeof(es6function)); 

    var Person = function Person() { 
     _classCallCheck(this, Person); 
    }; 

    var tryThis = new Person(); 
    console.log(tryThis instanceof Person); 
})(); 

어떤 도움

주시면 감사하겠습니다 후 컴파일. 감사.

+0

이것은 거의 transpiler (babel)와 관련이 있습니다. 기본적으로 ES6을 지원하는 브라우저에서 예상대로 작동합니다. – rvighne

+0

나를 위해 잘 작동하는 것 같아 오류가'_typeof', 당신은 오타가 없다고 확신합니까 – adeneo

+0

나는 transpiled 것을 의미합니다. 잠깐, 내가 편집 할게. –

답변

2

실수로 바벨을 코드 두 번 통과시키는 것처럼 보입니다.

console.log(typeof es6function) 

ES6 코드는 당신이 다시 transpile 때

var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; 

var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) { 
    return typeof obj === "undefined" ? "undefined" : _typeof2(obj); 
} : function (obj) { 
    return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof2(obj); 
}; 

console.log(typeof es6function === 'undefined' ? 'undefined' : _typeof(es6function)); 

될 않습니다

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; 

console.log(typeof es6function === 'undefined' ? 'undefined' : _typeof(es6function)); 

에 transpiled받을 않습니다. _typeof/_typeof2 중복을 제외하면이 결과는 증발 결과와 비슷합니다. 빌드 구성 및 바벨 플러그인을 확인하십시오. 하나씩 해제하여 문제가 언제 사라지는 지 확인하고 책임있는 구성 요소에 버그를보고하십시오.

-3

이렇게 괄호를 추가 할 수 있습니까?

if(typeof(Symbol) === 'function')) { ... } 
+5

왜 OP가 그렇게해야합니까? 'typeof'는 연산자입니다. 괄호는 쓸모가 없습니다. 'typeof foo'는'typeof (foo)'와 동일합니다.'typeof (((((foo)))))'와 같습니다. –

+0

실제로 두 가지 방법 모두 작동해야하지만, 그 이유는 컴파일러가 될 수 있다고 생각합니다. –

+0

음, https://babeljs.io/repl/에서 작동합니다. –