2010-04-20 4 views
24

자바 변수가 정의되지 않았는지 테스트하려고합니다.자바 스크립트 배열 값이 정의되지 않았습니다 ... 어떻게 테스트합니까?

처음에는 "믿을 수 없다"라는 경고를받지 않으면 predQuery [preId]의 값이 '정의되지 않음'으로 기대하지 않습니다. 하지만 종종 그렇습니다. 내 진술을 추측하고 있습니다.

predQuery[preId]=='undefined') 

은 정의되지 않은 요소와 올바르게 일치하지 않습니다.

if((predQuery.length < preId) || (predQuery[preId]=="") || (predQuery[preId]=='undefined')){ 
    alert("its unbelievable"); 
    alert(predQuery[preId]); 
    queryPreds[variables] = preId; 
    queryObjs[variables] = objId; 
    predQuery[preId] = variables; 
} 
else { 
    alert(predQuery[preId]); 
    var predIndex = predQuery[preId]; 
    queryPreds[predIndex] = preId; 
    queryObjs[predIndex] = objId; 
} 

필요한 경우 더 많은 코드를 추가 할 수 있습니다.

if (predQuery[preId] === undefined) 

에 대한

+0

일 내 if 문. – Ankur

+0

그렇다면 표시되지 않습니다. – deceze

+0

@deceze ... 내 코드를 변경했다는 것을 의미했습니다. 나는 그 문제를 편집하지 않았다. 그러나 그것은 같은 문제를 가진 미래의 사람들을 돕지 않을 것이다. – Ankur

답변

55

array[index] == 'undefined'는 "미등록"문자열을 배열 인덱스의 값을 비교 참조.
아마도 유형 인을 비교하는 typeof array[index] == 'undefined'을 찾고있을 것입니다.

+3

+ 1은 변경 불가능한'undefined' 대신에 불변 타입을 비교합니다. –

+2

이것만으로는 [undefined] [0]'과'[] [0]'을 구별 할 수 없습니다. 배열이 비어있을 가능성이있는 경우이 시나리오가 발생할 수 있습니다. – sighrobot

1

확인 연산자에 대한 엄격한 동등를 사용합니다. comparison operators

+1

거의 -하지만 가장 좋은 방법은 deceze가 말했듯이, undefined가 될 수 있기 때문에 typeof를 비교할 수 없기 때문입니다. –

+1

undefined를 정의 할 수 있으므로 절대적이지 않습니다. 간단히'window.undefined = "lolz";' – Warty

+5

으로 재정의하는 모든 내장 함수를 보호하는 JavaScript를 작성하는 것은 불가능합니다 (거의 모든 것이 가능합니다). 재정의를 피하기 위해 코드를 읽기 쉽게 만드는 것을지지하지 않습니다. 'typeof'는 크로스 윈도우 스크립팅에서 데이터 유형을 탐지하기 위해 또 다른 용도가 있지만 어쨌든'undefined '에는 적용되지 않습니다. – bobince

1

이 시도 : typeof(predQuery[preId])=='undefined'
또는 더 일반적으로 : typeof(yourArray[yourIndex])=='undefined'
당신은 false를 반환하는 정의를 "정의되지 않은"비교하고 =)

10

당신은 그것을 배열 인덱스를 확인하는 문자열 "undefined"를 포함, 당신도해야 typeof 연산자를 사용

typeof predQuery[preId] == 'undefined' 

을 또는 undefined 전역 속성 사용

undefined 글로벌 재산권 쓰기 때문에
predQuery[preId] === undefined 

첫 번째 방법은,안전하고는 다른 값으로 변경 될 수있다.

4

로마에 더 많은 (많은) 가지 방법이 있습니다 :

//=>considering predQuery[preId] is undefined: 
predQuery[preId] === undefined; //=> true 
undefined === predQuery[preId] //=> true 
predQuery[preId] || 'it\'s unbelievable!' //=> it's unbelievable 
var isdef = predQuery[preId] ? predQuery[preId] : null //=> isdef = null 

환호!

6
predQuery[preId]=='undefined' 

당신은'undefined'문자열에 대해 테스트하고 있습니다; 이 테스트를 typeof 테스트와 혼동하여 문자열을 반환합니다. 당신은 아마 특수 값 undefined에 대해 테스트 할 의미 :

predQuery[preId]===undefined 

참고 엄격한 평등 운영자가 일반적으로-원치 않는 경기 null==undefined을 피하기 위해. 하나 preIdpredQuery의 회원이 아니거나 는 회원하지만 특별한 undefined 값으로 설정 값이 있습니다

그러나 당신이 undefined 가치를 얻을 수있는 두 가지 방법이 있습니다.종종, 존재 여부를 확인하기 만하면됩니다. 이 경우에 in 연산자는 더 적합 :

!(preId in predQuery) 
0

이 코드가 잘 나는 내 절로 (대해서 typeof (predQuery은 [preId]) == '정의되지 않은')를 사용해

function isUndefined(array, index) { 
    return ((String(array[index]) == "undefined") ? "Yes" : "No"); 
} 
+1

=== 대신 ==를 사용하는 이유는 무엇입니까? – leofontes