2012-04-10 2 views
2
if (typeof operand1 != "undefined" && operand1 == operand2) { 
} 

위의 operand1 일부 시나리오 하에서 undefined 수있다 operand1오퍼랜드 2 사이 어떤지를 확인하는 if 진술 정의 될 수있다. typeof operand1 != "undefined"이 불필요한 것인지 궁금합니다.동등 비교되는 하나의 피연산자

답변

3

=== 연산자가 아닌 == 연산자를 사용하므로 operand2이 결코 null이되지 않는 경우에만 불필요합니다.

하지만 operand2 의미 만있는 경우 operand2operand1에 "진짜 같다"통과 할 === 연산자를 사용하는 if statement을 변경할 수 있습니다뿐만 아니라 undefined입니다.

당신은 여기에 대한 자세한 내용을보실 수 있습니다 :
Which equals operator (== vs ===) should be used in JavaScript comparisons?

여기에 기록 된 것을 보여주는 fiddle. Data Base 세계에서


, null (또는 undefined)는 무엇과 비교할 수 없음을 의미 아무것도 없다.

SQL 예 : 아무것도 null로 동일하지 않으며, 널 아무것도 동일하지 않기 때문에

SELECT * 
FROM table_name t 
Where t.operand1 = null 

이 오류가 발생, 그냥 존재하지 않습니다. javascript에서

은 당신이 nullundefined에 일을 비교할 수 있습니다, 그처럼되지 않습니다,하지만 당신은 이와 같은 TypeError들과 조심해야 :

var x; 
x.foo; // TypeError! 
+0

마지막 예가 잘못되었습니다. 'TypeError'가 될 것입니다. 왜냐하면'undefined'는 속성을 가질 수 없기 때문입니다. – alex

+0

@alex. 내 잘못, 고마워. 고마워. – gdoron

+0

@ gdoron "operand2가 절대로 거짓 값이 아닐 경우에만 불필요합니다"라는 의미에 대해 자세히 설명해 주실 수 있습니까? operand2는 위조 된 값일 수 있습니다. 'typeof operand1! = "undefined"'가 필요한 예제를보고 싶습니다. Thx – tamakisquare

2

내가했던 유일한 시간을 두 변수의 값의 동일성을 검사하기 전에 typeof 점검을 수행해야한다고 말하면 중 하나가 정의되지 않아서 ReferenceError을 방지 할 수 있습니다.

jsFiddle.

+2

@gouron 나는 '정의되지 않았다'고 말하지 않았고, 정의되지 않았다. *와 같이 범위 체인에'operand1'이라는 변수가 없다. – alex

+0

답변 해 주셔서 감사합니다. 당신은 좋은 지적을 제기했습니다. 나는 하나 이상의 답을 받아 들일 수만 있다면 좋겠다. – tamakisquare

+0

바이올린에 오타가 있다고 생각합니다.'typeof operand1! = "undefined"가 존재하더라도 여전히 ReferenceError가 발생합니다. – tamakisquare