복붙노트

[JQUERY] 변수 이름을 가져옵니다. 자바 스크립트 "반사"

JQUERY

변수 이름을 가져옵니다. 자바 스크립트 "반사"

해결법


  1. 1.예를 들어 .NET을 사용하고 있기 때문에 잠깐 탐험 해 봅시다. C #에서는 표현식을 취하는 함수를 만들 수 있습니다.

    예를 들어 .NET을 사용하고 있기 때문에 잠깐 탐험 해 봅시다. C #에서는 표현식을 취하는 함수를 만들 수 있습니다.

    void BadArgument<T>(Expression<Func<T>> argExpr)
    {
    }
    

    그러나이 함수의 호출에서 변수 이름을 추출 할 수 있으려면 호출이 항상 올바른 구문을 정확하게 사용하는지 확인해야합니다 (비록 컴파일 시간을 적용 할 수있는 방법이 없지만).

    if(x < 0)
        BadArgument(() => x);
    

    그래서 그것은 완료 될 수 있지만, 매우 깨지기 쉽고 꽤 느립니다. 기본적으로 LAMBDA expression () => x를 기반으로 전체 표현식 트리를 만들기위한 지침을 생성합니다. 호출하는 함수는 해당 표현식 트리를 구문 분석하고 인수의 이름을 찾을 수 있습니다.

    이런 종류의 일은 자바 스크립트에서 수행 될 수 있습니까? 확실한!

    자바 스크립트에서는 폐쇄가 내부 기능을 통해 생성되므로 위의 람다 표현과 동등한 것들은 다음과 같습니다.

    function(){return x;}
    

    그리고 JavaScript는 스크립팅 언어이므로 각 함수는 자체 정의 와열과 동일합니다. 즉, 위의 함수에서 tostring ()을 호출하는 것은 다음과 같습니다.

    function(){return x;}
    

    이 JSFiddle은 로깅 스타일 함수 에서이 값을 활용할 수있는 방법을 보여줍니다. 그런 다음 결과 펑션 문자열을 구문 분석 할 수 있습니다. 이는 .NET Expression 트리를 파싱하는 것보다 약간 더 문제가 될 것입니다. 또한 X의 실제 값을 얻는 것은 .NET보다 훨씬 쉽습니다.

    그러나 당신이 그것을 할 수 있기 때문에 당신이 해야하는 것은 아닙니다. Gee-Whiz Parlor Trick만큼 멋지지만, 그것이 바로 아래에 올 때 그것은 가치가 없습니다.


  2. 2.실제로 당신은 할 수 있습니다. 여기에 스 니펫이 있습니다.

    실제로 당신은 할 수 있습니다. 여기에 스 니펫이 있습니다.

    function getVarName(v) {
        for (var key in window) {
            if (window[key] === v)
                return key;
        }
    }
    var testvar = 13142;
    function test(t) {
        var varName = getVarName(t);
        // window[varName] -- your variable actualy
        alert(varName);
    }
    test(testvar); // testvar
    

    다른 문제는 동일한 변수가 포함 된 VAR을 생성하는 경우입니다. 그런 다음 첫 번째 var가 반환됩니다.


  3. 3.너는 할 수 없다. 그러나 변수 이름을 이미 알고 있으므로 (문자열의 끝으로 그것을 연결하기 위해 그것을 사용해야 함), 왜 그냥 입력하지 않으시겠습니까?

    너는 할 수 없다. 그러나 변수 이름을 이미 알고 있으므로 (문자열의 끝으로 그것을 연결하기 위해 그것을 사용해야 함), 왜 그냥 입력하지 않으시겠습니까?

    즉,

    logger.log('variable x has invalid value '+x);
    

  4. 4.변수 이름을 얻는 것이 쉽습니다

    변수 이름을 얻는 것이 쉽습니다

    //This is variable you want to get the name
    var prop;
    
    var obj = {prop};
    for(var propName in obj){
      alert(propName);
      break;
    }
    

    또한 여기에서 시도 할 수 있습니다.

    편집

    코멘트 @brady에 감사드립니다

    object.keys ({variableName}) [0]는 변수 이름을 제공합니다.

    function(x,y)
    {
        const key = (obj) => Object.keys(obj)[0];
    
        if (x === 0)
            logger.log('variable ' + key({x}) + ' has invalid value ' + x)
            // logs: 'variable x has invalid value 0)
        if (y === 0)
            logger.log('variable ' + key({y}) + ' has invalid value ' + y)
            // logs: 'variable y has invalid value 0)
    }
    
  5. from https://stackoverflow.com/questions/9795773/get-variable-name-javascript-reflection by cc-by-sa and MIT license