簡體   English   中英

真/假的麻煩

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM