문제

예를 들어 다음과 같이 알고 있습니다.

if (in_array('...'), array('.', '..', '...') === true)

위에:

if (in_array('...'), array('.', '..', '...') == true)

성능을 높이고 몇 가지 일반적인 실수 (예 : 1 == True)를 피할 수 있지만, 문자열에 대한 엄격한 비교를 사용해야 할 이유가 있는지 궁금합니다.

if ('...' === '...')

똑같은 일을하는 것 같습니다.

if ('...' == '...')

누군가이 주제에 약간의 빛을 가져올 수 있다면 감사합니다.

도움이 되었습니까?

해결책

두 값이 모두 문자열임을 보장한다는 것을 알고 있다면 == 그리고 === 둘 사이의 유일한 차이점은 === 유형이 효과적인 값뿐만 아니라 유형이 동일인지 확인합니다.

그러나 경우에 따라 값이 문자열이 될 것임 (예 : $ _get 및 $ _post 변수와 같은 것과 같은 문자열이 될 것임을 알 수 없습니다. 다음을 고려하세요:

$_GET['foo'] == ""

위의 표현식은 True If로 평가됩니다 foo 빈 문자열로 전달되었지만 True로 평가할 것입니다. 가치가 전달되지 않았습니다 foo 조금도. 대조적으로,

$_GET['foo'] === ""

빈 문자열이 명시 적으로 통과 된 경우에만 TRUE를 평가합니다. $_GET['foo'] 빈 문자열과 동일 할 수 있지만 유형은 실제로 문자열이 아닌 해당 인덱스의 빈 값이기 때문에 그렇지 않습니다.

다른 팁

하나 또는 다른 하나를 사용할 수있는 경우 : 엄격한 비교를 선택하십시오.

  1. 성능이 향상됩니다
  2. 예상치 못한 결과를 방지합니다

문자열을 비교할 때는 문자열이 비어 있거나 변수가 실제로는 그렇지 않다고 생각하기 때문에 여전히 예상치 못한 결과를 얻을 수 있습니다.

항상 true 또는 false로 줄일 수 있기 때문에 두 개의 문자열 리터럴 비교를 사용하지 않습니다. 예를 들어:

if ('...' === '...')

와 같다

if (TRUE)

따라서 항상 하나 이상의 변수를 비교하기 때문에 예기치 않은 결과를 얻을 수 있다고 가정해야합니다.

다양한 엄격한 것과 느슨한 비교의 벤치 마크 결과를 볼 수 있습니다. http://net-beta.net/ubench/. 나는 또한 내 자신의 테스트를 실행했고 같은 결과를 발견했습니다.

이것은 마이크로 최적화이므로 기존 코드가 눈에 띄는 차이를 만들지 않기 때문에 기존 코드를 변경하지 않아야하지만 새 코드를 작성하는 경우 가장 효율적인 기술을 사용하여 연습 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top