변수가 존재하는지 JavaScript 확인 (정의 / 초기화)
변수가 초기화되었는지 확인하는 방법은 무엇입니까? (변수가 어떤 것을 가질 수 있다고 가정하면 (문자열, 정수, 객체, 함수 등))
if (elem) { // or !elem
또는
if (typeof(elem) !== 'undefined') {
또는
if (elem != null) {
당신 은 typeof
연산자를 원한다 . 구체적으로 특별히:
if (typeof variable !== 'undefined') {
// the variable is defined
}
typeof
변수가 정말 정의되지 않은 경우 운영자는 확인합니다.
if (typeof variable === 'undefined') {
// variable is undefined
}
typeof
작업자는 다른 사업자 달리 버리지 않는 하면 ReferenceError 미표시 변수와 함께 사용하면 예외.
그러나을 typeof null
반환 한다는 점에 유의하십시오 "object"
. 변수를로 초기화하는 실수를 피해야합니다 null
. 안전을 위해 대신 사용할 수 있습니다.
if (typeof variable === 'undefined' || variable === null) {
// variable is undefined or null
}
===
단순 동등성 대신 엄격한 비교를 사용하는 방법에 대한 자세한 내용 ==
은 다음을 참조하십시오.
JavaScript 비교에 어떤 equals 연산자 (== vs ===)를 사용해야합니까?
JavaScript에서는 변수를 정의 할 수 있지만 값을 보유 undefined
하므로 가장 일반적인 대답은 기술적으로 정확하지 않으며 대신 다음을 수행합니다.
if (typeof v === "undefined") {
// no variable "v" is defined in the current scope
// *or* some variable v exists and has been assigned the value undefined
} else {
// some variable (global or local) "v" is defined in the current scope
// *and* it contains a value other than undefined
}
그것은 당신의 목적에 충분할 수 있습니다. 다음 테스트는 시맨틱이 더 단순하여 코드의 동작을 정확하게 설명하고 이해하는 것이 더 쉽습니다 (해당 사항에 관심이있는 경우).
if ("v" in window) {
// global variable v is defined
} else {
// global variable v is not defined
}
물론 이것은 브라우저 ( window
글로벌 객체의 이름) 에서 실행중인 것으로 가정합니다 . 그러나 이와 같은 글로벌 사용자를 모색하고 있다면 아마도 브라우저에있을 것입니다. 주관적으로, 사용 'name' in window
은 window.name
글로벌을 참조하기 위해 사용 하는 것과 문체 적으로 일치 합니다. 변수가 window
아닌 속성으로 전역에 액세스 하면 코드에서 참조하는 선언되지 않은 변수의 수를 최소화 할 수 있으며 (보 풀림의 이점을 위해) 전역 변수가 지역 변수에 의해 가려 질 가능성을 피할 수 있습니다. 또한 전 세계 사람들이 피부를 크롤링하면 비교적 긴 스틱으로 만 피부를 만지는 것이 더 편할 것입니다.
대부분의 경우 다음을 사용합니다.
if (elem) { // or !elem
당신을 위해 일을 할 것입니다 .... 이것은 아래의 경우를 확인합니다 :
- undefined : 값이 정의되어 있지 않은 경우
undefined
- null : null 인 경우, 예를 들어 DOM 요소가 존재하지 않는 경우
- 빈 문자열 :
''
- 0 : 숫자 0
- NaN : 숫자가 아님
- 그릇된
따라서 모든 경우를 다루지 만 항상 공백이있는 문자열과 같이 항상 이상한 경우가 있습니다.이 문자열과 같이 공백이있는 문자열은 문자열 ' '
안에 공백이 있으므로 자바 스크립트로 정의됩니다 ... 예를 들어이 경우에는 다음과 같이 trim ()을 사용하여 하나 이상의 검사를 추가합니다.
if(elem) {
if(typeof elem === 'string' && elem.trim()) {
///
또한 이러한 검사는 Javascript에서 객체와 배열이 다르게 작동하므로 빈 배열 과 빈 개체 는 항상 true 이므로 값만 검사 합니다 .[]
{}
아래 이미지를 작성하여 답변에 대한 간략한 간략한 정보를 표시합니다.
대부분의 경우 다음을 사용합니다.
elem != null
간단한 달리 if (elem)
, 그것은 수 0
, false
, NaN
그리고 ''
있지만, 거부 null
또는 undefined
객체의 인수의 존재, 또는 속성에 대한 그것에게 좋은 일반적인 테스트를 만드는.
다른 검사도 잘못된 것이 아니며 용도가 다릅니다.
if (elem)
다음과 같은 경우에 사용될 수있는elem
오브젝트를 보장 경우, 또는false
,0
등 (이에 상당 "기본"값으로 간주undefined
하거나null
).typeof elem == 'undefined'
지정된null
변수가 초기화되지 않은 변수 나 속성에 고유 한 의미를 갖는 경우에 사용할 수 있습니다 .- 선언 되지 않은 경우 오류가 발생하지 않는 유일한 검사입니다 (예 : 문, 속성이 아니거나 함수 인수가 아님). 제 생각에는 오타가 눈에 띄지 않게 미끄러 져 들어갈 수 있기 때문에 다소 위험합니다. 이를 피하려면 아래 방법을 참조하십시오.
elem
var
window
- 선언 되지 않은 경우 오류가 발생하지 않는 유일한 검사입니다 (예 : 문, 속성이 아니거나 함수 인수가 아님). 제 생각에는 오타가 눈에 띄지 않게 미끄러 져 들어갈 수 있기 때문에 다소 위험합니다. 이를 피하려면 아래 방법을 참조하십시오.
또한 다음에 대한 엄격한 비교가 유용합니다 undefined
.
if (elem === undefined) ...
그러나 전역 undefined
은 다른 값으로 재정의 될 수 있으므로 변수 undefined
를 사용하기 전에 현재 범위에서 변수를 선언하는 것이 가장 좋습니다 .
var undefined; // really undefined
if (elem === undefined) ...
또는:
(function (undefined) {
if (elem === undefined) ...
})();
이 방법의 두 번째 장점은 JS 축소 기가 undefined
변수를 단일 문자로 줄여서 매번 몇 바이트를 절약 할 수 있다는 것입니다.
변수가 존재하는지 확인하는 방법
변수가 존재하고 초기화되었는지 테스트하기위한 방탄 솔루션입니다.
var setOrNot = typeof variable !== typeof undefined;
특정 변수가 초기화되지 않은 경우 기본값을 설정하기 위해 삼항 연산자 와 함께 가장 일반적으로 사용됩니다 .
var dark = typeof darkColor !== typeof undefined ? darkColor : "black";
캡슐화 문제
불행히도, 단순히 체크를 함수로 캡슐화 할 수는 없습니다.
다음과 같은 일을 생각할 수 있습니다.
function isset(variable) {
return typeof variable !== typeof undefined;
}
그러나 예를 들어 전화하면 참조 오류가 발생합니다. 존재하지 않는 변수를 함수에 전달할 수 없으므로 isset(foo)
변수 foo
가 정의되지 않았습니다.
잡히지 않은 ReferenceError : foo가 정의되지 않았습니다
함수 매개 변수가 정의되지 않았는지 테스트
우리 반면 isset
함수는 변수 (이유 hereabove 설명을위한)의 존재 여부 테스트에 사용할 수 없습니다, 그것은 함수의 매개 변수가 정의되지 여부를 테스트 우리를 허용하지 :
var a = '5';
var test = function(x, y) {
console.log(isset(x));
console.log(isset(y));
};
test(a);
// OUTPUT :
// ------------
// TRUE
// FALSE
에 대한 값이 비록 y
기능에 전달되지 않습니다 test
, 우리 isset
때문에 기능은 이러한 맥락에서 완벽하게 작동 y
기능에 알려진 test
int로서 undefined
값.
확인하십시오 window
. hasOwnProperty
( " varname
" )
과다한 typeof
답변 에 대한 대안 ;
var varname = value;
전역 범위에서 명령문으로 선언 된 전역 변수
창 개체의 속성으로 액세스 할 수 있습니다.
따라서 hasOwnProperty()
방법은
객체가 지정된 속성을 자체 속성으로 가지고 있는지 여부를 나타내는 부울을 반환합니다 (상속하는 것이 아니라).
여부를 결정하는 데 사용할 수 있습니다
var
의 "변수 varName는" 전 세계적으로 선언 된 즉 의 한 속성입니다 window
.
// Globally established, therefore, properties of window
var foo = "whatever", // string
bar = false, // bool
baz; // undefined
// window.qux does not exist
console.log( [
window.hasOwnProperty( "foo" ), // true
window.hasOwnProperty( "bar" ), // true
window.hasOwnProperty( "baz" ), // true
window.hasOwnProperty( "qux" ) // false
] );
가장 좋은 점 hasOwnProperty()
은 그것을 호출 할 때 아직 선언되지 않은 변수를 사용하지 않는다는 것입니다. 물론 처음에는 문제의 절반입니다.
항상 완벽 하거나 이상적인 솔루션 은 아니지만 특정 상황에서는 그저 직업 일뿐입니다!
노트
위의 내용은 var
다음 과 달리 변수를 정의하는 데 사용할 때 적용됩니다let
.
블록 범위 로컬 변수를 선언하고 선택적으로 값으로 초기화합니다.
var
블록 범위에 관계없이 전체 함수 또는 전체 함수에 변수를 정의하는 키워드 와 다릅니다 .최상위 수준의 프로그램 및 함수
let
에서는와 달리var
전역 객체에 대한 속성을 만들지 않습니다.
완전성 : const
상수는 정의에 따라 실제로는 가변적이지 않습니다 (그 내용은 다를 수 있음) 더 관련성 :
전역 상수는
var
변수 와 달리 윈도우 객체의 속성이되지 않습니다 . 상수의 이니셜 라이저가 필요합니다. 즉, 선언 된 동일한 명령문에 값을 지정해야합니다.상수의 값은 재 할당을 통해 변경할 수 없으며 다시 선언 할 수 없습니다.
const 선언은 값에 대한 읽기 전용 참조를 만듭니다. 변수 식별자를 재 할당 할 수 없다는 것만으로 보유한 값이 변경 불가능하다는 의미는 아닙니다.
때문에 let
변수 나 const
상수가 상속 한 모든 개체의 속성 결코 hasOwnProperty()
방법, 자신의 존재를 확인하는 데 사용할 수 없습니다.
가용성과 사용에 관하여 hasOwnProperty()
:
Object의 자손은 메소드를 상속합니다
hasOwnProperty()
. [...]in
연산자 와 달리이 방법은 객체의 프로토 타입 체인을 검사하지 않습니다.
간단한 할당 및 관련 확인을 수행 할 때이를 확인하는 또 다른 간단한 방법이 있습니다. 간단하게 사용 조건부 (삼항) 연산자.
var values = typeof variable !== 'undefined' ? variable : '';
참조 변수의 인스턴스 할당으로 전역 변수를 선언하려고 할 때도 유용합니다.
변수를 확인하려면 undefined
또는 이 아니어야합니다 null
. 그런 다음 아래 확인을 수행하십시오.
변수가 선언되고 값을 확인하려면 간단 합니다. 함께 수행 undefined
하고 null
함께 확인합니다.
var values = variable ? variable : '';
변수가 정의되었는지 관심이 있는지 또는 의미있는 값을 가지길 원하는지에 따라 다릅니다.
유형이 정의되지 않았는지 확인하면 변수가 아직 정의되어 있는지 확인합니다.
=== null
또는 !== null
변수 값이 정확히 맞는지 확인합니다 null
.
== null
또는 != null
값이 undefined
또는 인지 확인합니다 null
.
if(value)
변수가 있는지 확인합니다 undefined
, null
, 0
, 또는 빈 문자열.
가장 좋은 대답은 맞습니다. typeof를 사용하십시오.
그러나 내가 지적하고 싶었던 것은 JavaScript undefined
에서 변경할 수 없다는 것입니다 (불경건 한 이유로). 따라서 단순히 검사 만하면 varName !== undefined
예상대로 항상 반환되지 않을 가능성이 있습니다. 다른 라이브러리는 정의되지 않은 상태로 변경되었을 수 있기 때문입니다. 몇 가지 답변 (@ skalee 's)은을 사용하지 않는 것을 선호 typeof
하며 문제가 발생할 수 있습니다.
이를 처리하는 "오래된"방법은의 잠재적 인 뮤팅 / 과잉을 상쇄하기 위해 undefined를 var로 선언하는 것입니다 undefined
. 그러나 가장 좋은 방법은 다른 코드에서 typeof
재정의하는 것을 무시 하기 때문에 여전히 사용 하는 것 undefined
입니다. 특히 페이지에서 무엇이 실행될 수 있는지 아는 사람이있는 곳에서 사용할 코드를 작성하는 경우 ...
변수를 테스트하는 간단한 방법은 선언되어 있지 않습니다 (정의되지 않음).
if (typeof variable === "undefined") {
...
}
브라우저 외부에서 실행되는 스크립트를 감지하는 데 유용하다는 것을 알았습니다 ( window
변수 를 선언하지 않음 ).
if (typeof console != "undefined") {
...
}
또는 더 나은
if ((typeof console == "object") && (typeof console.profile == "function")) {
console.profile(f.constructor);
}
모든 브라우저에서 작동
토론에 기여하기 위해 변수가 문자열 또는 항상 선호하는 객체 여야한다는 것을 알고 if (!variable)
있으면 거짓인지 확인하십시오. 예를 들어 다음과 같이보다 깨끗한 코드를 만들 수 있습니다.
if (typeof data !== "undefined" && typeof data.url === "undefined") {
var message = 'Error receiving response';
if (typeof data.error !== "undefined") {
message = data.error;
} else if (typeof data.message !== "undefined") {
message = data.message;
}
alert(message);
}
..는
if (data && !data.url) {
var message = data.error || data.message || 'Error receiving response';
alert(message)
}
undefined와 null을 구분하기는 어렵습니다. Null 은 변수에 특정 값이 없음을 나타내려는 경우 변수에 할당 할 수있는 값입니다. 정의되지 않음 은 할당되지 않은 변수의 기본값이되는 특수 값입니다.
var _undefined;
var _null = null;
alert(_undefined);
alert(_null);
alert(_undefined == _null);
alert(_undefined === _null);
널은 자바 스크립트에서 값 typeof null
반환"object"
따라서 null 값을 전달하면 허용되는 답변이 작동하지 않습니다. null 값을 전달하면 null 값을 추가로 확인해야합니다.
if ((typeof variable !== "undefined") && (variable !== null))
{
// the variable is defined and not null
}
가장 강력한 '정의 된'검사는 typeof
if (typeof elem === 'undefined')
정의 된 변수를 확인하여 기본값을 할당하는 경우 하나의 라이너를 읽기 쉽도록 다음과 같이 할 수 있습니다.
elem = elem || defaultElem;
자주 사용하는 것이 좋습니다. 자바 스크립트에서 기본값을 설정하는 관용적 방법
typeof 키워드를 사용하는이 라이너도 있습니다 .
elem = (typeof elem === 'undefined') ? defaultElem : elem;
typeof
연산자 를 사용할 수 있습니다 .
예를 들어
var dataSet;
alert("Variable dataSet is : " + typeof dataSet);
위의 코드 스 니펫은 다음과 같은 출력을 반환합니다.
변수 dataSet는 정의되지 않았습니다.
이 답변 (Fred Gandt 솔루션 제외)은 모두 부정확하거나 불완전합니다.
내가 가치 variableName;
를 지닐 필요가 있다고 가정 undefined
하고, 따라서 var variableName;
이미 초기화 된 것과 같은 방식으로 선언되었습니다 . -이미 신고되었는지 어떻게 확인합니까?
또는 한 번의 호출로 "Book1.chapter22.paragraph37"이 존재하지만 참조 오류가 발생하지 않는지 즉시 확인하려면 어떻게해야합니까?
가장 강력한 JasvaScript 연산자 인 in 연산자 를 사용하여 수행합니다 . :
"[variable||property]" in [context||root]
>> true||false
AJAX가 가장 인기있는시기에 나는 "Book1.chapter22.paragraph37"과 같은 속성 이름에 대한 심층 테스트를 포함하여 네임 스페이스가 존재하는지 여부를 판별 할 수있는 메소드 (나중에 명명 된) isNS ()를 작성했습니다.
그러나 이전에 게시되었으며 그 중요성 때문에 별도의 스레드로 게시 할 가치가 있으므로 여기에 게시하지는 않지만 소스 코드를 찾는 데 도움이되는 키워드 ( javascript + isNS )를 제공 합니다. 필요한 설명.
질문에 요약 된 특정 상황에서
typeof window.console === "undefined"
~와 동일하다
window.console === undefined
나는 더 짧기 때문에 후자를 선호합니다.
console
전체 범위 ( window
모든 브라우저 의 개체) 에서만 검색합니다 . 이 특별한 상황에서는 바람직하다. console
다른 곳에서는 정의 하고 싶지 않습니다 .
@BrianKelley는 그의 훌륭한 답변에서 기술적 세부 사항을 설명합니다. 나는 결론이 결여되어 있고 읽기 쉬운 것으로 요약했다.
객체에 따라 두 가지 방법을 사용합니다.
if( !variable ){
// variable is either
// 1. '';
// 2. 0;
// 3. undefined;
// 4. null;
// 5. false;
}
때로는 빈 문자열을 거짓으로 평가하고 싶지 않으므로이 경우를 사용합니다.
function invalid( item ){
return (item === undefined || item === null);
}
if( invalid( variable )){
// only here if null or undefined;
}
반대로 필요한 경우 첫 번째 인스턴스에서! variable은 !! variable이되고 유효하지 않은 함수는 ===가! =가되고 함수 이름은 notInvalid로 변경됩니다.
상황에 따라 다릅니다. jQuery와 같이 코드 외부에서 정의되지 않았거나 정의되지 않은 것을 확인하려는 경우 다음을 원합니다.
if (typeof(jQuery) != "undefined")
(엄격한 동등성이 필요하지 않은 경우 typeof는 항상 문자열을 반환합니다.) 그러나 전달되거나 전달되지 않은 함수에 대한 인수가 있으면 항상 정의되지만 생략하면 null입니다.
function sayHello(name) {
if (name) return "Hello, " + name;
else return "Hello unknown person";
}
sayHello(); // => "Hello unknown person"
내 선호는 typeof(elem) != 'undefined' && elem != null
입니다.
그러나 선택하면, 체크를 기능에 넣는 것을 고려하십시오.
function existy (x) {
return typeof (x) != 'undefined' && x != null;
}
변수가 선언되었는지 모르는 경우 계속하십시오. typeof (x) != 'undefined' && x != null;
변수가 선언되었지만 존재하지 않을 수 있음을 알고 있다면
existy(elem) && doSomething(elem);
확인중인 변수는 때때로 중첩 속성 일 수 있습니다. prop ||를 사용할 수 있습니다 {} 해당 부동산에 대한 라인 점검 존재 여부를 확인하려면 다음을 수행하십시오.
var exists = ((((existy(myObj).prop1||{}).prop2||{}).prop3||{})[1]||{}).prop4;
각 속성 후에 (... '|| {}'). nextProp를 사용하면 누락 된 속성이 오류를 발생시키지 않습니다.
또는 당신은 같은 존재를 사용할 수 있습니다 existy(o) && existy(o.p) && existy(o.p.q) && doSomething(o.p.q)
변수가 선언 / 설정되었는지 확인하기 위해이 더러운 트릭을 수행했습니다.
로도 코드를 함수로 추출하는 방법을 찾지 못했습니다 eval
.
"use strict";
// var someVar;
var declared;
try {
someVar;
declared = true;
} catch(e) {
declared = false;
}
if (declared) {
console.log("someVar is declared; now has the value: " + someVar);
} else {
console.log("someVar is not declared");
}
아직 언급되지 않은 것이 놀랍습니다 ...
다음은 몇 가지 추가 변형을 사용하는 것입니다. this['var_name']
변수를 정의하기 전에 사용할 수있는이 방법의 이점.
if (this['elem']) {...}; // less safe than the res but works as long as you're note expecting a falsy value
if (this['elem'] !== undefined) {...}; // check if it's been declared
if (this['elem'] !== undefined && elem !== null) {...}; // check if it's not null, you can use just elem for the second part
// these will work even if you have an improper variable definition declared here
elem = null; // <-- no var here!! BAD!
'Programming' 카테고리의 다른 글
이 인증서에는 잘못된 발급자 Apple Push Services가 있습니다. (0) | 2020.02.15 |
---|---|
PHP에서 날짜 형식 변환 (0) | 2020.02.15 |
PHP에서 정적 코드 분석을 수행하는 방법은 무엇입니까? (0) | 2020.02.15 |
Facebook 콜백이 '# _ = _'을 반환 URL에 추가합니다. (0) | 2020.02.15 |
mongodb에서 마지막 N 레코드를 얻는 방법? (0) | 2020.02.15 |