2011-09-09 12 views
2

저는 학교에서 봇을 적극적으로 프로그래밍하고 지난 5 년 동안 일해 왔지만, ==와 ===의 차이점을 찾아 내지 못했습니다.언제 == 비교기 ===를 사용해야합니까?

내가 하나 =를 사용하여 비교기의 차이를 볼 수 있습니다

, 그것은 루프를 통해 왼손잡이 변수의 값을 볼 것이다, 예 :

while($line = getrow(something)) 

그래서 ==와의 차이점은 무엇입니까 === 같은 진술 :

if ($var1 === $var2) 
//versus 
if ($var1 == $var2) 

마찬가지로 :

if ($var1 !== $var2) 
//versus 
if ($var1 != $var2) 

난 항상 사용했습니다 두 배는 같지만, 나는 삼중을 사용한 적이 없다. 내가 사용하는 언어는 다음과 같습니다. php, vb.net, java, javascript, c/C++.

큰 따옴표와 다른 tripple quote에서 진행중인 작업을 체계적으로 배우는 데 관심이 있습니다.

언제 다른 것을 사용해야합니까? 호기심에 호소 해 주셔서 감사합니다 :)

+0

입니다 : 올바른 코드는 거짓과 엄격한 비교를 사용? –

+0

http://www.daaq.net/old/javascript/index.php?page=js+operators&parent=core+javascript –

+1

'$ var' <- 자바 스크립트가 아니길 바랍니다. 그러나 어쨌든 적절한 언어 *로 문제를 표기하십시오. –

답변

3

일반적으로 ==는 값의 동일성만을 찾습니다. 그래서, 예를 들어 ...

5 == 5.0 //true 

그러나 ===도 값 유형 (언어에 내가 익숙) 간주합니다.

var five = 5; 
var five_float = (float)5.0; 

five === 5;  //true - both int, both equal to 5 
five_float === 5; //false - both equal 5 but one is an int and one is a float 

FYI (보통 할당 연산자라고도 함) = 연산자는 오른쪽 왼쪽 파라미터의 값을 설정하기 위해 사용된다. 이것은 꽤 분명합니다. 그러나 대부분의 언어에서 할당이 성공하면 true를 반환합니다. 당신은 == (또는 ===)를 사용하는 것을 = 사용하지 않으려합니다. 왜냐하면 == (또는 ===)는 비교처럼 보일 것이지만 그렇지 않기 때문에 예기치 않게 true를 반환 할 것입니다. 이 PHP와 자바 스크립트의 사실이다 -

는 예를 들어,

myNumber = 7; 
if(myNumber = 10) 
{ 
    //will always be true and execute this code because myNumber will successfully 
    //be assigned the value of 10 instead of checking to see if the number is 10. 
    //oops! 
} 

마지막 주 ... 숫자 10와 동일한 경우 검사 할 말을 할 수 있습니다. 나는 C++ 또는 Java에서 === 연산자가 있다고 생각하지 않고 ==는 약간 다른 의미를 가지고 있습니다.

+0

JavaScript '5 === 5.0'에서도 마찬가지입니다. 자바도 C/C++도'=== '와 동등하지 않습니다. 사실, 어떤 언어가'=== '또는 동등한 언어를 가지고 있습니까? –

+0

좋은 캐치 @pst, 나는 float에 대한 명시 적 캐스트를 추가했습니다. 5! == (float) 5. 나는 게으른 평가와 느슨한 타이핑을하는 언어에서 흔히 볼 수있는 것 같아요. PHP, JavaScript 및 파이썬이 목록의 시작이라고 생각합니다. –

+0

파이썬에는 === 없습니다. – Dirk

0

==는 값만 확인합니다 (항등 연산자). ===는 데이터 유형 (= 완전 항등 연산자)도 확인합니다.

1 == '1'이 참입니다.
1 === '1'이 거짓 - 첫 번째가 정수이고 두 번째가 문자열입니다.

1 == true이 참입니다.
1 === true이 거짓 - 첫 번째는 정수이고 두 번째는 부울입니다.

일반적으로 == (항등 연산자)를 사용하려고하지만 때로는 특정 유형의 것이 있는지 확인하려고합니다. 나는 누군가가 모범을 보여줄 수 있다고 확신하지만, 머리 꼭대기에있는 사람을 생각할 수는 없다. 그러나 나는 확실히 그것을 사용했다.

-2

이것이 모든 언어에 해당하는지는 모르겠지만 javascript에서는 ==는 유형 비교를 나타냅니다.

0 == false (true) 0 === false (false) 

허위 값을 비교할 때 ===를 사용하지 않는 것이 일반적인 js 오류입니다.

var a; 

if(a) do something 

$ a가 $ b가 같고, 같은 유형의 경우

1

$a === $b TRUE (a가 입력되지 않을 경우 제로가있는 경우). (PHP 4에서 소개)

$a !== $b $ a가 $ b와 같지 않거나 같은 유형이 아닌 경우 TRUE입니다. 차이는 === 엄격한 비교 점이다 (필자는 트리플 === 구문이 유효 다른 언어의 확실하지 않다) PHP와 자바 스크립트에서

Reference

0

(PHP 4에서 소개). ==은 느슨합니다. 즉, ===은 값과 유형을 비교하지만 ==은 값만 비교합니다. 이것의 좋은 예는 아래의 버그 PHP 코드 :

$str = 'Zebraman stole my child\'s pet lime!'; 

// Search for zebra man 
if(strpos($str, 'Zebraman')){ 
    echo 'The string contains "Zebraman"'; 
}else{ 
    echo 'The string doesn\'t contain "Zebraman"'; 
} 

Example Here

strpos($str, 'Zebraman') 이후 반환 0 (문자열 Zebraman의 인덱스) 및 0 이후 falsy입니다. 이 코드는 The string doesn't contain "Zebraman"을 출력합니다. 이 자바 스크립트

$str = 'Zebraman stole my child\'s pet lime!'; 

// Search for zebra man 
if(strpos($str, 'Zebraman') !== false){ 
    echo 'The string contains "Zebraman"'; 
}else{ 
    echo 'The string doesn\'t contain "Zebraman"'; 
} 

Example Here

See the PHP man page on strpos

관련 문제