2016-10-02 7 views
0

2つの文字列を比較しています。何とか私がそれらを比較しようとするにしても、彼らは平等ではないように見えますが、そうです。ノードで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()"


そして=====はJavaScriptで文字列を比較するための正しい方法です:-) ...偽ですので。両方のオペランドが文字列の場合は、どちらを使用するかは関係ありません。オペランドのいずれかが文字列である場合とそうでない場合は、抽象均等変換規則(複雑な場合)を使用する場合は==を、オペランドが同じ型でない場合は比較をfalseにする場合は===を使用します。

関連する問題