![](/img/trans.png)
[英]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.