2016-10-02 5 views
0

두 문자열을 비교하고 있습니다. 어떤 이유로 든 내가 그들을 비교하려고해도 그것이 평등하지 않은 것처럼 보입니다.노드에서 JavaScript 문자열 비교가 실패합니다.

logger.trace("eval Str: "+util.inspect(evalStr)); 
logger.trace("Is next():" + evalStr == "next()"); 
logger.trace("Is next():" + evalStr.valueOf() == "next()".valueOf()); 
logger.trace(toHex(evalStr)); 
logger.trace(toHex("next()")); 

2016-10-02T12:10:55.446-04:00 - trace: eval Str: 'next()' 
2016-10-02T12:10:55.447-04:00 - trace: false 
2016-10-02T12:10:55.448-04:00 - trace: false 
2016-10-02T12:10:55.448-04:00 - trace: 6e6578742829 
2016-10-02T12:10:55.449-04:00 - trace: 6e6578742829 


function toHex(str) { 
    var hex = ''; 
    for(var i=0;i<str.length;i++) { 
     hex += ''+str.charCodeAt(i).toString(16); 
    } 
    return hex; 
} 

답변

3

문제는 당신이 당신이 비교하고 무슨 생각을 비교하지 않을의 trace 통화에서 +입니다. 당신은 그래서 당신은 당신이 그룹에 원하는 방식으로 그룹화하고 명시 적 ()를 추가 할 :

logger.trace("Is next():" + (evalStr == "next()")); 
// Note --------------------^-------------------^ 

이유 :

원래 코드 :

logger.trace("Is next():" + evalStr == "next()"); 

... 다음과 같이 평가된다 :

logger.trace(("Is next():" + evalStr) == "next()"); 
// Note -----^----------------------^ 

...이 때문에 출력에 Is next():이 표시되지 않습니다. "Is next():next()" == "next()"


그리고 == 또는 === 자바 스크립트에서 문자열을 비교하는 올바른 방법입니다 :-) ... 거짓이기 때문에. 두 피연산자가 모두 문자열이라면 어떤 것을 사용하든 관계 없습니다. 피연산자 중 하나가 문자열 일 수도 있고 아닐 경우, 피연산자가 같은 유형이 아닌 경우 비교가 false가되도록하려면 추상 등가 변환 규칙 (복잡함)을 원할 경우 ==을 사용하거나 ===을 사용하십시오.