2017-01-26 4 views
0

문의 양식을 가지고 있습니다. 그리고 양식 필드 유효성 검사를 위해 js를 사용합니다.엄격한 동등 비교

if(email.length == 0 || email.indexOf('@') == '-1'){ 
    var error = true; 
} 

그러나 더 나은 성능을 위해 엄격한 동일성 비교를 사용하고 싶습니다. 그래서 시도해 봅니다

if(email.length === 0 || email.indexOf('@') === '-1'){ 
     var error = true; 
    } 

그러나 작동하지 않습니다.

답변

4

엄격한 평등의 경우 값은 동일해야하며 유형이 동일해야합니다. 코드에 따라 '-1'string이지만 indexOfnumber을 반환합니다. === 연산자는 변환을 수행하지 않으므로 값이 같지만 같은 유형이 아닌 경우에도 === 단순히 false를 반환합니다.

typeof 연산자를 사용하여 유형을 찾을 수 있습니다. 당신이 typeof '-1'을 시도하는 경우

그래서, 그것은 는 "문자열"
typeof 'email.indexOf('@')"수"그래서

을 반환 반환, 수행의 올바른 방법은 숫자 주위에 따옴표를 제거하는 것입니다 -1 아래 그림과 같이. MDN

엄격한 평등에서

if(email.length === 0 || email.indexOf('@') === -1){ 
      var error = true; 
     } 

평등을 위해 두 값을 비교합니다. 비교되기 전에 어느 값도 이 암시 적으로 다른 값으로 변환되지 않습니다. 값의 유형이 다른 경우 값이 다른 것으로 간주됩니다. 그렇지 않으면 값이 동일한 유형이고 숫자가 아닌 경우 동일한 값을 가진 경우 해당 값은 같다고 간주됩니다. 마지막으로, 값이 모두 숫자 인 경우 NaN 이 아니고 동일한 값이거나 하나가 +0이고 하나가 -0 인 경우 값은 숫자로 간주됩니다.

0

Identity/Strict Equality (===) 비교 연산자 는 유형을 변환하지 않습니다. 이것은 규칙적인 평등과 구분됩니다. .indexOf()은 (명백하게) 문자열 -1과 같지 않은 숫자를 반환합니다. 이론적으로는 하나를 다른쪽에 캐스트 할 수 있지만 가장 좋은 방법은 다음과 같이 숫자를 포함하는 것입니다.