我搜索了#34; JavaScript返回false不能正常工作"和类似的字符串,但我发现大多数人没有得到嵌入HTML的JS的预期行为。此代码不是网页的一部分。我正在做一个应该非常简单的编码挑战,但我遇到了奇怪的行为,并且会喜欢知道发生了什么事的人的意见。
挑战在于测试字符串是否包含正确嵌套的括号。我想用一个堆栈和一个简单的对象来匹配关闭和打开括号来解决这个问题。我的代码如下:
function validBraces(str) {
const openers = ['(', '{', '['];
const matches = { '(':')', '{':'}', '[':']' };
const stack = [];
str.split("").forEach((ch) => {
if (openers.indexOf(ch) > -1) {
stack.push(ch);
} else {
const currentBrace = stack.pop();
if (matches[currentBrace] !== ch) {
console.log("false!");
return false;
}
}
});
if (stack.length === 0) {
return true;
}
}
奇怪的是,当传递一个不是由正确嵌套的括号组成的字符串,因此应返回false时,此代码将记录" false!"但不会返回虚假。它仍然会返回真实的'。这怎么可能呢?到底是怎么回事?有人知道吗?我真的很想了解发生了什么。谢谢!