什么情況下可以使用 JavaScript 中的 Boolean 函數(shù)
用 Boolean 進(jìn)行真實(shí)檢查
Boolean() 函數(shù)在對(duì)數(shù)據(jù)進(jìn)行真值檢查時(shí)特別有用,并且可能比雙重否定 (!!) 操作更具可讀性:
- let x = 'some-value';
- // 這看起來(lái)不太美觀
- if (!!x) {
- // ...
- }
- // 這更具可讀性
- if (Boolean(x)) {
- // ...
- }
正如你在上面的例子中所看到的,它的用途完全相同,并且用起來(lái)非常簡(jiǎn)單。同樣,由于 Boolean() 本身就是一個(gè)返回布爾值的函數(shù),你可以用它來(lái)檢查集合、過(guò)濾數(shù)組等:
- const values = [0, 0, 2, 0, 3];
- // 用作 Array.prototype.some() 的回調(diào)
- const hasValidValue = values.some(Boolean);
- // 用作 Array.prototype.filter() 的回調(diào)
- const nonEmptyValues = values.filter(Boolean);
小心處理布爾對(duì)象
雖然 Boolean() 函數(shù)非常有用,但是會(huì)遇到一些關(guān)于 Boolean 對(duì)象和 new Boolean() 構(gòu)造函數(shù)的問(wèn)題。Boolean 對(duì)象是一個(gè)布爾值的對(duì)象包裝器,但棘手的部分是,作為一個(gè)對(duì)象,即使包含的值為 false,它也始終為真!
- let x = new Boolean(false);
- if (x) {
- // 這里的代碼會(huì)執(zhí)行
- }
例如,上面的代碼會(huì)考慮 x 為真,即使它明確把 false 作為其值。這可能有些令人困惑,但是如果你不用 Boolean 對(duì)象和 new Boolean() 構(gòu)造函數(shù),就可以輕松避免它,除非你完全確定出于什么原因需要使用它。我找不到任何需要使用它的場(chǎng)景,所以一開(kāi)始可能并不常見(jiàn)。