source

변수 === 정의되지 않은 변수 대 변수 유형 === "변수"

factcode 2022. 12. 25. 09:42
반응형

변수 === 정의되지 않은 변수 대 변수 유형 === "변수"

jQuery Core Style Guidelines에서는 변수가 정의되어 있는지 여부를 확인하는 두 가지 방법을 제안합니다.

  • 변수: " " " " :typeof variable === "undefined"
  • 변수: " " " " :variable === undefined
  • 성::object.prop === undefined

jQuery는 글로벌 변수에 대해 하나의 접근 방식을 사용하고 로컬 및 특성에 대해 다른 접근 방식을 사용하는 이유는 무엇입니까?

되지 않은 변수의 경우 " " " 입니다.typeof foo 리터럴을 합니다."undefined" 체크는 "", """ 입니다.foo === undefined"foo is not defined" 오류가 발생합니다.

로컬 변수(어디선가 선언되어 있는 것을 알고 있는)의 경우, 이러한 에러는 발생하지 않기 때문에, ID 체크가 실시됩니다.

난 계속 사용할 거야typeof foo === "undefined" 수 없다.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

가 두 다른 는 jQuery가 만의 jQuery를 합니다.undefined, 즉 jQuery 함수 의 변수.undefined외부로부터의 조작으로부터 안전합니다. 두 한 사람이 만, 이 두 가지 접근방식은 어느 .foo === undefined더 빠르다고 판단했기 때문에 그렇게 하기로 결정했어요.[UPDATE: 코멘트에 기재된 바와 같이 와의 비교도 약간 짧기 때문에 참고가 될 수 있습니다.]그러나 실제 상황에서 얻는 이득은 완전히 미미합니다. 이 체크는 결코 어떤 종류의 병목도 되지 않습니다.그리고 당신이 잃는 것은 매우 중요합니다: 비교를 위해 호스트 객체의 속성을 평가하는 것은 오류를 발생시킬 수 있습니다.typeof수표는 절대 안 돼

예를 들어, IE 에서는 XML 의 해석에 다음과 같이 사용됩니다.

var x = new ActiveXObject("Microsoft.XMLDOM");

a a a a a a a a a to to 가 있는지 loadXML다음 중 하나:

typeof x.loadXML === "undefined"; // Returns false

한편, 다음과 같습니다.

x.loadXML === undefined; // Throws an error

갱신하다

의 또 다른 typeof 않은 되지 않은 변수,즉되지 않은 입니다.foo === undefined 않고,.그리고 실제로는ReferenceError@Linus Kleen lin @Linus Kleen 。예를 들어 다음과 같습니다.

typeof someUndeclaredVariable; // "undefined"
someUndeclaredVariable === undefined; // throws a ReferenceError

": "를 합니다.typeofdisclossible을 클릭합니다.

변수 또는 바로 '변수 종류'입니다.undefined를 재정의할 수 있습니다.

undefined = "foo";
var variable = "foo";
if (variable === undefined)
  console.log("eh, what?!");

typeof variable하다.

업데이트: 이는 ES5에서는 글로벌하지 않습니다.undefined입니다.

1의 값 15.1.1
[...]
3 15.1.1.3 " "
「」의 값undefined8.1번.
[ ] ) 、 、 [ ] 、 false { [ Writable ] 、 false 、 [ Enumerable ] 、 false 、 [ Configurable ] 、 false } 。

그러나 로컬 변수에 의해 그림자가 그려질 수 있습니다.

(function() {
  var undefined = "foo";
  var variable = "foo";
  if (variable === undefined)
    console.log("eh, what?!");  
})()

또는 파라미터:

(function(undefined) {
  var variable = "foo";
  if (variable === undefined)
    console.log("eh, what?!");  
})("foo")

★★★★★★★★★★★★★★★★★★undefined선언되는 것은 는 "jQuery"를 선언합니다.undefined그 주된 기능에서. 그들은 금고를 한다.undefined값을 매겨도 외부에서는 을 매겨 합니다.typeof안전할 수 있는 스타일.

★★★★★★★★★★★★★★★★★★★★★★★★★★의 퍼포먼스 향상에 관심이 있는 사람variable === undefined를 참조할 수 있습니다만, 크롬의 최적화 뿐인 것 같습니다.

변수의 , 은 '아까', '아까', '아까', '아까'localVar === undefined로컬 범위 내 어딘가에 정의되어 있을 필요가 있기 때문에 동작합니다.그렇지 않으면 로컬로 간주되지 않습니다.

및되어 있지 않은 과 같습니다.someVar === undefined예외가 발생합니다.수집되지 않은 참조 오류: j가 정의되지 않았습니다.

위의 내용을 명확히 하는 몇 가지 코드가 있습니다.보다 명확한 설명을 위해 인라인 코멘트에 주의해 주십시오.

function f (x) {
    if (x === undefined) console.log('x is undefined [x === undefined].');
    else console.log('x is not undefined [x === undefined.]');

    if (typeof(x) === 'undefined') console.log('x is undefined [typeof(x) === \'undefined\'].');
    else console.log('x is not undefined [typeof(x) === \'undefined\'].');

    // This will throw exception because what the hell is j? It is nowhere to be found.
    try
    {
        if (j === undefined) console.log('j is undefined [j === undefined].');
        else console.log('j is not undefined [j === undefined].');
    }
    catch(e){console.log('Error!!! Cannot use [j === undefined] because j is nowhere to be found in our source code.');}

    // However this will not throw exception
    if (typeof j === 'undefined') console.log('j is undefined (typeof(x) === \'undefined\'). We can use this check even though j is nowhere to be found in our source code and it will not throw.');
    else console.log('j is not undefined [typeof(x) === \'undefined\'].');
};

위의 코드를 다음과 같이 호출하면:

f();

출력은 다음과 같습니다.

x is undefined [x === undefined].
x is undefined [typeof(x) === 'undefined'].
Error!!! Cannot use [j === undefined] because j is nowhere to be found in our source code.
j is undefined (typeof(x) === 'undefined'). We can use this check even though j is nowhere to be found in our source code and it will not throw.

위의 코드를 다음과 같이 호출하는 경우(실제로 임의의 값을 사용하여):

f(null); 
f(1);

출력은 다음과 같습니다.

x is not undefined [x === undefined].
x is not undefined [typeof(x) === 'undefined'].
Error!!! Cannot use [j === undefined] because j is nowhere to be found in our source code.
j is undefined (typeof(x) === 'undefined'). We can use this check even though j is nowhere to be found in our source code and it will not throw.

때 : 음음 、 음다 、 다 when 、 。typeof x === 'undefined'기본적으로 다음과 같은 질문을 합니다.소스코드 어딘가에 변수가 존재하는지(정의되어 있는지) 확인해 주세요.(다소)C# 또는 Java를 알고 있는 경우 이러한 유형의 체크는 컴파일되지 않기 때문에 수행되지 않습니다.

<== 바이올린 ==>

요약:.

이 "True"인 .undefined:

var globalVar1;

// This variable is declared, but not defined and thus has the value undefined
console.log(globalVar1 === undefined);

// This variable is not declared and thus will throw a referenceError
console.log(globalVar2 === undefined);

글로벌 범위에서는 변수가 선언되었는지 100% 확신할 수 없기 때문에 referenceError가 발생할 수 있습니다.하는 typeof되지 않은 이 : unknown variable의 경우 unknown variable의 경우 operator on unknown variable이 됩니다.

var globalVar1;

console.log(typeof globalVar1 === 'undefined');
console.log(typeof globalVar2 === 'undefined');

는 것, 유, 유, 유, 유, this, this, this, this, this, this, this, .typeof "을 합니다.undefined가 현재 하고 있는 undefined그게 바로 우리가 원하는 거야


  • 로컬 변수에서는 이 변수가 존재할 것을 미리 알고 있기 때문에 이 문제는 발생하지 않습니다.변수가 존재하는 경우 해당 함수를 간단히 살펴볼 수 있습니다.
  • 이 하지 않습니다.undefined

var obj = {};

console.log(obj.myProp === undefined);

typeof a === 'undefined' 빠르다a === 'undefined'v6.9.약입니다.

언급URL : https://stackoverflow.com/questions/4725603/variable-undefined-vs-typeof-variable-undefined

반응형