[英]array.every() with type checking doesn’t work consistently
我正在嘗試將Array.every()
與typeof()
以查看至少一個元素是否為非數字
下面是代碼片段
1。
[2, "text", 2].every(val => console.log(typeof val ==="number"));// returns true
2。
["two", "text", 2].every(val => console.log(typeof val ==="number")); //returns false
我期望上面的1和2返回false。 我們知道為什么number
作為第一項會影響結果嗎? 有沒有其他方法可以達到相同的結果
出現意外結果的原因是您登錄的位置錯誤。
如果Array#every()
所有元素都滿足您提供的謂詞(回調),則Array#every()
方法將返回true。 但是,對於您的代碼,謂詞將返回console.log
的結果(未定義)。 這意味着數組中的“每個”項都返回未定義,這反過來意味着在兩種情況下, every()
的結果均為false。
需要注意的是,在評估表達式console.log(typeof val ==="number")
,控制台將輸出true
或false
,因此請注意不要將此日志記錄與every()
的結果混淆。
要解決這些預期的結果,請嘗試從.every()
回調中刪除對console.log
調用,而是像這樣記錄every()
的結果:
console.log('Expect false for mix of value types:', [2, "text", 2].every(val => (typeof val ==="number")) ); console.log('Expect false for mix of value types:', ["two", "text", 2].every(val => (typeof val ==="number")) ); console.log('Expect true for all numbers:', [1, 123, 2].every(val => (typeof val ==="number")) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.