JavaScript 节点中的字符串比较失败
JavaScript string comparison fails in Node
我正在比较两个字符串。出于某种原因,无论我如何尝试比较它们,看起来它们似乎不相等,但它们确实相等。
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;
}
问题是 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中字符串的正确方法。如果两个操作数都是字符串,那么使用哪个都没有关系。如果其中一个操作数可能是也可能不是字符串,如果您想要抽象相等转换规则(这很复杂),请使用 ==
或如果您希望在操作数不是时比较为假,请使用 ===
不是同一类型。
我正在比较两个字符串。出于某种原因,无论我如何尝试比较它们,看起来它们似乎不相等,但它们确实相等。
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;
}
问题是 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中字符串的正确方法。如果两个操作数都是字符串,那么使用哪个都没有关系。如果其中一个操作数可能是也可能不是字符串,如果您想要抽象相等转换规则(这很复杂),请使用 ==
或如果您希望在操作数不是时比较为假,请使用 ===
不是同一类型。