[英]trouble with truthy/falsey
快速介紹一下,我是一個學習 JS 的菜鳥,並且覺得它進展順利,但是我現在正在做一個簡單的練習,我掛斷了一些東西。
我了解到:錯誤值是在 boolean 上下文中遇到時被認為是錯誤的值,例如:false, 0, -0, 0n, "", null, undefined, NaN (Not a number) falsey(例如字符串,boolean true,任何非 0 的數字等)
所以在我下面的例子中,如果有人可以幫助我理解為什么 value => value == true,當我的數組中有一個字符串值(“Angela”)時,會打印出 false(就像這種情況一樣)。 謝謝!
let values = [11, NaN, [], "Angela"] function checkForFalsey() { if (values.some(value => value == true)) { console.log("At least one item is falsey") } } checkForFalsey()
字符串既不真實也不虛假。 發生的事情稱為類型強制。 由於 string 和 Boolean 不是同一類型,因此 JavaScript 強制其中一個類型匹配另一個,然后檢查相等性(高級解釋)。 詳細解釋見這里: https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/
因此,當您執行"abc" == true
JavaScript 時,會將這兩個值強制為數字類型。 字符串不是數字,因此toNumber("abc")
返回NaN
。 它還強制一個數字為true
,在這種情況下返回1
(如您所述,1 為真,0 為假)。
對於它的價值, NaN
也不是真假。 將其與 true 或 false 進行比較總是會導致false
。
編輯:
由於代碼段,這個問題有點令人困惑,我知道您正在嘗試尋找虛假值。
之所以:
value => value == true
會打印出 false 這是因為數組的所有元素都不等於true
。
您對什么是虛假值是正確的,但這並不意味着真實值將是==
到true
。
在這里你可以閱讀更多關於它的信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness
檢查真實值的一種方法是:
(values.some(value => value != false))
或者
(values.some(value => !!value === true))
老答案:
因為您使用的方法測試數組中至少有一個元素與條件匹配。
你可以在這里閱讀更多
如果要檢查數組的所有元素是否符合條件,則可以使用.every()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every
let values = [11, NaN, [], ""] function checkForFalsey() { if (values.every(value => value == false)) { console.log("All values are falsey"); } else { console.log("NOT all values are falsey"); } } checkForFalsey()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.