전역 변수가 있는지 확인하는 올바른 방법은 무엇입니까?
JSLint는 이것을 유효한 코드로 전달하지 않습니다.
/* global someVar: false */
if (typeof someVar === "undefined") {
var someVar = "hi!";
}
올바른 방법은 무엇입니까?
/*global window */
if (window.someVar === undefined) {
window.someVar = 123456;
}
if (!window.hasOwnProperty('someVar')) {
window.someVar = 123456;
}
/**
* @param {string} nameOfVariable
*/
function globalExists(nameOfVariable) {
return nameOfVariable in window
}
var foo 또는 window.foo를 사용하여 전역 변수를 생성했는지 여부는 중요하지 않습니다. 전역 컨텍스트에서 var로 생성 된 변수는 window에 기록됩니다.
아직 존재하지 않는 경우에만 전역 변수를 할당하려면 다음을 시도하십시오.
window.someVar = window.someVar || 'hi';
또는
window['someVar'] = window['someVar'] || 'hi';
시험
variableName in window
또는
typeof window[variableName] != 'undefined'
또는
window[variableName] !== undefined
또는
window.hasOwnProperty(variableName)
나는 이것이 실제로 JSLint의 문제라고 생각합니다. 다음 오류가 발생합니다.
예기치 않은 'typeof'입니다. '정의되지 않음'과 직접 비교하십시오.
나는 이것이 나쁜 조언이라고 생각합니다. JavaScript에서는 undefined
일반적으로 정의되지 않은 전역 변수입니다. 그러나 일부 브라우저에서는 다음과 같이 스크립트에서 수정할 수 window.undefined = 'defined'
있습니다. 이 경우와 직접 비교 undefined
하면 예기치 않은 결과가 발생할 수 있습니다. 다행히 현재 ECMA 5 호환 브라우저는 할당을 허용하지 않습니다 undefined
(엄격 모드에서는 예외가 발생합니다).
typeof someVar === "undefined"
게시 someVar in window
한대로 또는 Susei가 제안한대로을 선호합니다 .
if (typeof someVar === "undefined") { var someVar = "hi!"; }
someVar
(로컬 또는 글로벌)이 정의되지 않았 는지 확인합니다 .
전역 변수를 확인하려면 다음을 사용할 수 있습니다.
if(window['someVar'] === undefined) {
...
}
이것이 브라우저에 있다고 가정하면 :)
bfavaretto가 잘못되었습니다.
전역 undefined를 값으로 설정해도 undefined에 대한 개체 테스트가 변경되지 않습니다. 좋아하는 브라우저 JavaScript 콘솔에서 이것을 시도하십시오.
var udef; var idef = 42;
alert(udef === undefined); // Alerts "true".
alert(idef === undefined); // Alerts "false".
window.undefined = 'defined';
alert(udef === undefined); // Alerts "true".
alert(idef === undefined); // Alerts "false".
This is simply due to JavaScript ignoring all and any values attempted to be set on the undefined variable.
window.undefined = 'defined';
alert(window.undefined); // Alerts "undefined".
This would be a simple way to perform the check .
But this check would fail if variableName
is declared and is assigned with the boolean value: false
if(window.variableName){
}
ReferenceURL : https://stackoverflow.com/questions/11596315/what-is-the-correct-way-to-check-if-a-global-variable-exists
'code' 카테고리의 다른 글
순전히 기능적인 데이터 구조의 이점은 무엇입니까? (0) | 2020.12.29 |
---|---|
cygwin은 파일 권한을 000으로 설정합니다. (0) | 2020.12.29 |
계산 결과에 단위 유형 추가 (0) | 2020.12.29 |
시작할 수 없습니다. " (0) | 2020.12.29 |
IsolateApps로 인해 지정된 암호 해독 키에 잘못된 16 진수 문자가 있습니다. (0) | 2020.12.29 |