[英]Why my code doesn't work correctly by sometimes returning true instead of 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.