JavaScript 변수 존재 여부 확인(정의/초기화)
변수가 초기화되었는지 확인하는 방법 중 어떤 것이 더 좋거나 정확합니까? (변수가 모든 것(string, int, object, function 등)을 포함할 수 있다고 가정합니다.)
if (elem) { // or !elem
또는
if (typeof elem !== 'undefined') {
또는
if (elem != null) {
교환원을 찾으시네요구체적으로는:
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 ) java ====== == 는 java java java java java java java?
대부분의 경우, 다음 항목을 사용합니다.
if (elem) { // or !elem
당신을 위해 일을 할 것이다!...다음의 케이스가 체크됩니다.
- undefined: 값이 정의되지 않은 경우
undefined
- null: null인 경우(예를 들어 DOM 요소가 존재하지 않는 경우)
- 빈 문자열:
''
- 0: 숫자 0
- NaN: 숫자가 아닙니다.
- 거짓의
할 수 공백이 .' '
다음과 같이 을 사용하여예를 들어, 이 경우 trim™을 사용하여 다음과 같은 체크를 1개 추가합니다.
if(elem) {
if(typeof elem === 'string' && elem.trim()) {
///
또한 개체와 배열이 Javascript, 빈 배열에서 다르게 작동하기 때문에 이러한 검사는 값에만 해당됩니다.[]
object 및 。{}
언제나 진실이다.
답변의 간단한 개요를 보여주기 위해 아래 이미지를 작성합니다.
할 수 값 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
변수 대신 코드에서 참조하는 미신고 변수의 수를 최소화하고(보풀을 위해), 로컬 변수에 의해 글로벌이 음영 처리되지 않도록 할 수 있습니다.또한, 만약 지구본이 여러분의 피부를 기어오르게 만든다면, 여러분은 이 비교적 긴 막대기로 만지는 것만으로 더 편안함을 느낄 수 있을 것입니다.
대부분의 경우 다음을 사용합니다.
elem != null
한 ★★★★★★★★★★와는 달리if (elem)
「」를 할 수 .0
,false
,NaN
★★★★★★★★★★★★★★★★★」''
, 거절합니다.null
★★★★★★★★★★★★★★★★★」undefined
이를 통해 인수 또는 객체의 속성에 대한 일반적인 테스트가 됩니다.
다른 체크도 잘못된 것이 아니라 용도만 다를 뿐입니다.
if (elem)
는 다음과 같은 경우에 할 수 .elem
또, 「물건」의 경우는, 「물건」이 됩니다.또는false
,0
은 "됩니다.undefined
★★★★★★★★★★★★★★★★★」null
를 참조해 주세요.typeof elem == 'undefined'
는 지정된 경우 할 수 .null
는 초기화되지 않은 변수 또는 속성에 고유한 의미를 가집니다.- 이 체크만이 에러를 발생시키지 않는 유일한 체크입니다.
elem
선언되지 않았습니다(즉, no).var
「」이 「」window
을 참조)제 생각에는 오타가 눈에 띄지 않게 스쳐 지나가기 때문에 상당히 위험합니다.이를 방지하려면 다음 방법을 참조하십시오.
- 이 체크만이 에러를 발생시키지 않는 유일한 체크입니다.
, 음, 음, 음, 음, 다, 다, 다, 다, compar, compar, also, also, also, also, also, also, also, also, also, also, also, also, also, also, also,undefined
:
if (elem === undefined) ...
「」는,undefined
수 .undefined
사용 전 현재 스코프에서 다음을 수행합니다.
var undefined; // really undefined
if (elem === undefined) ...
또는 다음 중 하나를 선택합니다.
(function (undefined) {
if (elem === undefined) ...
})();
의 두 은 JS 는 JS를 수 있다는 입니다.undefined
한 글자로 변경할 수 있으므로 매번 몇 바이트를 절약할 수 있습니다.
.("")hasOwnProperty
varname
의 여부를 확인합니다.
과대한 대체 수단typeof
회답
글로벌 변수가 선언되었습니다.var varname = value;
scope의
창 개체의 속성으로 액세스할 수 있습니다.
와 같이, 와이같은,hasOwnProperty()
method, " " " 입니다.
개체가 지정된 속성을 상속받지 않고 자신의 속성으로 가지고 있는지 여부를 나타내는 부울을 반환합니다.
사용할 수 있는지 아닌지를 판단하기 위해
a var
"varname"이 글로벌하게 선언되었습니다.즉, 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
키워드: 변수를 글로벌하게 정의하거나 블록스코프에 관계없이 함수 전체에 로컬로 정의합니다.및에서는, 그그 at at at at at at 「 」
let
는, 「」와 달리, 「」는 다릅니다.var
는 글로벌 오브젝트에 속성을 작성하지 않습니다.
완전성을 위해: 정의상 상수는 실제로 가변적이지 않습니다(내용은 다양할 수 있지만). 보다 관련성이 높습니다.
는 창 객체의 이 되지 창 객체의 속성이 되지 않습니다.
var
하다. 즉 된 것과.상수에 대한 이니셜라이저가 필요합니다.즉, 선언된 것과 같은 문으로 상수의 값을 지정해야 합니다.상수 값은 재할당을 통해 변경할 수 없으며 다시 선언할 수 없습니다.
const 선언은 값에 대한 읽기 전용 참조를 만듭니다.변수 식별자를 재할당할 수 없는 값일 뿐, 보유하는 값이 불변수 식별자를 재할당할 수 없습니다.
★★let
또는 "variables"const
사물의 .hasOwnProperty()
방법은 존재 여부를 확인하는 데 사용할 수 없습니다.
「 」의 및 hasOwnProperty()
:
오브젝트의 하위 오브젝트는 모두
hasOwnProperty()
메서드. [...] 연산자와 달리 이 메서드는 개체의 프로토타입 체인을 검사하지 않습니다.
변수가 존재하는지 확인하는 방법
이것은 변수가 존재하여 초기화되었는지 테스트하기 위한 매우 뛰어난 방탄 솔루션입니다.
var setOrNot = typeof variable !== typeof undefined;
이는 특정 변수가 초기화되지 않은 경우 기본값을 설정하기 위해 3진 연산자와 함께 가장 일반적으로 사용됩니다.
var dark = typeof darkColor !== typeof undefined ? darkColor : "black";
캡슐화에 관한 문제
안타깝게도, 단순히 수표를 함수에 캡슐화할 수는 없습니다.
다음과 같은 것을 생각할 수 있습니다.
function isset(variable) {
return typeof variable !== typeof undefined;
}
다만, 예를 들면, 콜을 하고 있는 경우는, 참조 에러가 발생합니다. isset(foo)
변수 " " "foo
하지 않는 할 수 않습니다.
수집되지 않은 참조 오류: foo가 정의되지 않았습니다.
함수 매개 변수가 정의되지 않았는지 테스트하는 중
★★★★★★★★★★★★★★★★★,isset
할 수 되어 있지 할 수 ).
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
로 undefined
discloss.discloss 。
변수를 선언하지 않는 짧은 방법(정의되지 않음)은 다음과 같습니다.
if (typeof variable === "undefined") {
...
}
되고 있는 하는 데 이 된다는 것을 (아직 ).window
★★★★★★★★★★★★★★★★★★」
간단한 할당 및 관련 검사를 수행할 때 이를 확인하는 또 다른 간단한 방법이 있습니다.조건(삼진수) 연산자를 사용하면 됩니다.
var values = typeof variable !== 'undefined' ? variable : '';
또한 참조 변수의 인스턴스 할당을 사용하여 글로벌 변수를 선언하려고 할 때도 유용합니다.
경우 는 """로 하지 undefined
★★★★★★★★★★★★★★★★★」null
그런 다음 아래 검사를 수행합니다.
변수가 선언되었을 때 값을 체크하는 경우는, 「Simple」이 됩니다. '무엇보다 더 좋다'라는 공연을 하게 .undefined
★★★★★★★★★★★★★★★★★」null
함께 체크합니다.
var values = variable ? variable : '';
변수가 정의되었는지 또는 의미 있는 값을 가지는지 여부에 따라 달라집니다.
유형이 정의되지 않았는지 확인하면 변수가 아직 정의되지 않았는지 확인합니다.
=== null
★★★★★★★★★★★★★★★★★」!== null
변수 값이 정확히 다음 값인지 여부만 확인합니다.null
.
== null
★★★★★★★★★★★★★★★★★」!= null
값이 '보다 낫다'인지를 확인해보겠습니다.undefined
★★★★★★★★★★★★★★★★★」null
.
if(value)
경우 가 '아니다'인지 아닌지를 확인합니다.undefined
,null
,0
빈 빈 문자열, 빈 문자열.
트라이캐치
되어 있지 를 들어 않은 경우 등try-catch 하지 않고 할 수 ('는 이를 확인할 수 있습니다(필요 없음).use strict
를 선택합니다.
try{
notDefinedVariable;
} catch(e) {
console.log('detected: variable not exists');
}
console.log('but the code is still executed');
notDefinedVariable; // without try-catch wrapper code stops here
console.log('code execution stops. You will NOT see this message on console');
왜?===
==
(소스)
if( a == b )
if( a === b )
가장 높은 답이 정답입니다. 유형을 사용하십시오.
, 제가 undefined
이데올로기 때문에 그냥 돼요.varName !== undefined
다른 libs가 정의되지 않은 상태로 변경될 수 있기 때문에 항상 예상대로 돌아오지 않을 가능성이 있습니다.의 대답(@의 경우)은@skalee, 1의 경우 @skalee를 하지 않는 하는 것 같습니다.typeof
그리고 그것은 사람을 곤경에 빠뜨릴 수 있다.
하는 「오래된 「Muting/」, 「Muting」, 「Muting/over-Riding」의 , 「되어 있지 않다고 이었습니다.undefined
하지만, 가장 좋은 방법은 여전히 사용하는 것입니다.typeof
, 이 명령어는, 「이 명령어」의 입니다.undefined
뭇매를 맞다특히, 이 페이지에서 다른 어떤 것이 실행될지 모르는 야생에서 사용하기 위해 코드를 작성하는 경우...
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)
}
가장 강력한 '정의되어 있는가' 체크는 다음 유형에 따라 이루어집니다.
if (typeof elem === 'undefined')
기본값을 할당하기 위해 정의된 변수만 체크하는 경우 읽기 쉬운 하나의 라이너에 대해 다음과 같은 작업을 자주 수행할 수 있습니다.
elem = elem || defaultElem;
대부분의 경우 사용할 수 있습니다. javascript에서 기본값을 설정하는 자동적인 방법을 참조하십시오.
type of 키워드를 사용하는 다음 라이너도 있습니다.
elem = (typeof elem === 'undefined') ? defaultElem : elem;
및 Null JavaScript 입니다.typeof null
"object"
따라서 null 값을 전달하면 수락된 답변이 작동하지 않습니다.null 값을 전달한 경우 null 값을 추가로 확인해야 합니다.
if ((typeof variable !== "undefined") && (variable !== null))
{
// the variable is defined and not null
}
변수가 선언/설정되었는지 확인하기 위해 이 더러운 방법을 사용했습니다.
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");
}
정의되지 않은 것과 늘을 구별하는 것은 어렵다.Null은 변수에 특정 값이 없음을 나타낼 때 변수에 할당할 수 있는 값입니다.Undefined는 할당되지 않은 변수의 기본값이 되는 특수값입니다.
var _undefined;
var _null = null;
alert(_undefined);
alert(_null);
alert(_undefined == _null);
alert(_undefined === _null);
.typeof
환입니니다다
예를들면,
var dataSet;
alert("Variable dataSet is : " + typeof dataSet);
위의 코드 스니펫은 다음과 같은 출력을 반환합니다.
변수 dataSet이 정의되지 않았습니다.
나는 물건에 따라 두 가지 방법을 사용한다.
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;
}
그 반대일 경우 첫 번째 인스턴스에서는 !syslog가 되고, 비활성 함수 ===에서는 !=가 되며 함수 이름은 notInvalid로 변경됩니다.
질문에서 개략적으로 설명한 특정 상황에서,
typeof window.console === "undefined"
와 동일하다
window.console === undefined
저는 후자가 더 짧아서 더 좋아요.
을 알아두세요.console
스코프(「」의 「」의 「」를 참조해 주세요.window
오브젝트)를 선택합니다.이 특정한 상황에서는 바람직하다.는 원하지 않는다console
하다
@Brian Kelley는 훌륭한 답변으로 기술적인 세부사항을 설명한다.저는 부족한 결론을 덧붙여서 읽기 쉬운 것으로만 정리했습니다.
는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★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)
상황에 따라 다르죠.jQuery와 같이 코드 밖에서 글로벌하게 정의되어 있거나 정의되어 있지 않은 것을 확인하는 경우:
if (typeof(jQuery) != "undefined")
(완벽한 동일성은 필요 없습니다.type of는 항상 문자열을 반환합니다).그러나 전달되었을 수도 있고 전달되지 않았을 수도 있는 함수에 대한 인수가 있는 경우 해당 인수는 항상 정의되지만 생략된 경우에는 null입니다.
function sayHello(name) {
if (name) return "Hello, " + name;
else return "Hello unknown person";
}
sayHello(); // => "Hello unknown person"
if (variable === undefined) {}
정상적으로 동작하며 정의되지 않은 것만 확인합니다.
다음과 같이 try...catch block을 사용할 수 있습니다.
var status = 'Variable exists'
try {
myVar
} catch (ReferenceError) {
status = 'Variable does not exist'
}
console.log(status)
단점은 ReferenceError가 발생하므로 함수에 넣을 수 없다는 것입니다.
function variableExists(x) {
var status = true
try {
x
} catch (ReferenceError) {
status = false
}
return status
}
console.log(variableExists(x))
편집:
중 되지 않았는지 (Javascript).var x = undefined
(미국의)
function globalVariableExists(variable) {
if (window[variable] != undefined) {
return true
}
return false
}
var x = undefined
console.log(globalVariableExists("x"))
console.log(globalVariableExists("y"))
var z = 123
console.log(globalVariableExists("z"))
편집 2:
하는지 여부를 확인할 가 있는 통과시킬 수 .this
문자열에 포함된 변수 이름과 함께 함수로 이동합니다.
function variableExists(variable, thisObj) {
if (thisObj[variable] !== undefined) {
return true
}
return false
}
class someClass {
constructor(name) {
this.x = 99
this.y = 99
this.z = 99
this.v = 99
console.log(variableExists(name, this))
}
}
new someClass('x')
new someClass('y')
new someClass('z')
new someClass('v')
new someClass('doesNotExist')
이 답변들은 (Fred Gandt 솔루션을 제외하고) 모두 부정확하거나 불완전합니다.
것이 해 보자.variableName;
undefined
을 하고 .var variableName;
즉, 이미 초기화되어 있습니다.- 이미 선언되어 있는지 어떻게 확인할 수 있습니까?
또는 한 번의 통화로 "Book1.chapter22.parget37"이 존재하는지 여부를 즉시 확인하고 참조 오류를 발생시키지 않으려면 어떻게 해야 합니까?
가장 강력한 JasvaScript 연산자인 in 연산자를 사용합니다.
"[variable||property]" in [context||root]
>> true||false
아직 언급되지 않았다니 놀랍네요
에서는 ' 낫다'를 사용한 몇 .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!
정확성과 간결성 때문에 이 방법을 선호합니다.
var x
if (x === void 0) {
console.log(`x is undefined`)
} else {
console.log(`x is defined`)
}
다른 댓글과 답변에서도 언급했듯이undefined
이치노키워드가 아니므로 글로벌스코프 이외의 범위에서 변수로 재정의할 수 있습니다.이 뉘앙스를 작은 앙ance음음음음음음음음음음음음음음음음음음음음 here here here here here here here here here here here here.
var undefined = 'bar'
console.log(`In the global scope: ${undefined}`)
function foo() {
var undefined = 'defined'
var x
if (x === undefined) {
console.log(`x === undefined`)
} else {
console.log(`x !== undefined`)
}
if (x === void 0) {
console.log(`x === void 0`)
} else {
console.log(`x !== void 0`)
}
}
foo()
호환성에 대해서는 무효를 참조해 주세요(IE5에서 지원).와!)
React JS에서는 상황이 좀 더 복잡해요!컴파일된 환경이기 때문에 (2018년 10월 1일 출시) 이후 ESLint의 규칙을 따르고 있습니다.이 문서는 이 문제에 관심이 있는 모든 사용자에게 도움이 됩니다.
JavaScript에서는 ES6 이전부터 변수와 함수 선언이 스코프의 맨 위에 호이스트 되어 있기 때문에 코드 내의 정식 선언 전에 식별자를 사용할 수 있습니다.
ES6의 이 [새로운]규칙은 아직 선언되지 않은 식별자에 대한 참조가 발견되면 경고합니다.
래, 록, 록, 록, 록, 록, 록, 록, so, so, so, so, so, so, so, so, so, so, so, so, so, so, soundefined
(또는 "초기화되지 않은" 변수. React에 선언되지 않은 변수를 포함할 수 없습니다.eslint 규칙을 끄지 않고 JS를 실행합니다.
GitHub에는 ES6 이전 표준을 활용하는 프로젝트가 너무 많아서 조정 없이 직접 컴파일하는 것은 기본적으로 불가능합니다.
ReactJs의 경우eval()
과 같은 되지 않은 다음과 같은 선언되지 않은 변수가 있는 경우...
if(undeclaredvar) {...}
이 부분은 간단하게...라고 고쳐 쓸 수 있습니다.
if(eval('typeof undeclaredvar !== "undefined"')) {...}
예를 들면...
if(eval("false")) {
console.log("NO!");
}
if(eval("true")) {
console.log("YEAH!");
}
React에 GitHub 저장소를 Import하는 사용자용JS 프로젝트, 이것은 변수가 선언되었는지 확인하는 유일한 방법입니다.닫기 전에 잘못 사용할 경우 보안 문제가 있음을 알려드립니다.
님의 if
는 키워드를 .let
수를만만 만만만다다
let name = undefined;
if (name) {
alert('valid')
};
언급URL : https://stackoverflow.com/questions/519145/how-can-i-check-whether-a-variable-is-defined-in-javascript
'programing' 카테고리의 다른 글
Java에서의 MySQL 데이터 시간 및 타임스탬프 처리 (0) | 2022.11.22 |
---|---|
MySQL의 테이블 필드에 인덱스가 있는지 확인하는 방법 (0) | 2022.11.22 |
자바스크립트의 월과 날짜를 2자리 형식으로 가져오려면 어떻게 해야 하나요? (0) | 2022.11.21 |
PHP의 ::class란 무엇입니까? (0) | 2022.11.21 |
속편을 사용하여 JSON 열에 MariaDB 제약 조건 CHECK 추가 (0) | 2022.11.21 |