繁体   English   中英

为什么这段代码返回 true 而不是 false

[英]why is this code returning true instead of false

这是代码:

const str = "asdfcvb";
const result = str.split("").every((e) => {
    return e==='a'||'b'});
console.log(result);

我希望 str.split("") 返回一个数组,并且每个方法都会检查数组中的每个元素是否等于'a'或'b',这应该返回false,但它返回true

因为e==='a'||'b'意思是((e==='a')||'b')

e !== 'a'情况下,它会返回在 Javascript 中为真值'b' ,因此every方法都从每个术语中获取真值,然后结果为真。

您可以使用以下内容来实现您想要的

const result = str.split("").every((e) => {
    return (e==='a') || (e==='b')
});

您不能从条件的第二部分省略=== 现在你说的是 return e === 'a''b' e不等于'a'时,它返回'b' 这是真的,当变成 boolean 时,它变成了真的。 在浏览器中运行:

'a' === 'b' || 'c'

如果你运行它,你会看到它返回'c'。 您的回调中也会发生同样的情况。 您必须将您的退货声明更改为此才能正常工作:

return e === 'a' || e === 'b'

一切似乎都是正确的。 问题在于您比较字符串的方式

你应该比较那些像e === "a" || e === "b" e === "a" || e === "b"

和工作代码

const str = "asdfcvb";
const result = str.split("").every((e) => {
    return (e === "a" || e === "b")});
console.log(result);

解释:

return e==='a'||'b'

对第一个项目"a"运行测试将返回 true,因为现在e在这里是"a" ,等于"a"

现在如果它到达第二个项目,它是"s"并且显然不等于"a"所以return e==='a'||'b'变成return false||'b'现在当你评估这个时返回值将是"b"

并将"b"作为条件类似于true因为它不是undefined的或null

这可以测试如下

if("b") return true; // returns true

因此它为每个项目返回true ,从而最终返回true

您正在使用|| 操作员在您的情况下不正确。 这是一个常见的错字。 您应该在||之后使用相同的等于短语 . 例如,您的代码将是这样的:

 const str = 'asdfcvb'; const result = str.split('').every((e) => { return e === 'a' || e === 'b'; }); console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM