JavaScript Boolean 特性

事發

之前其中一個 hungry delete commit

if (!columnNumber){
    columnNumber = this.length;
}

因為 Javascript 的 boolean 特性由致一個 bug。原意想用 if (!columnNumber) 判斷是否 undefined, 因為 columnNumber 是一個 optional number。但當 columnNumber 為 0 時,(!columnNumber)true, 會計算錯誤的結果。

解決方法:

使用 typeof 就好了。

if (typeof columnNumber === 'undefined') {
    columnNumber = this.length;
}

Boolean 特性

JavaScript 判斷 boolean expression 時會自動轉換類型, Truthy 會轉為 true, 而 Falsy 會轉為 false。

Falsy 就是 Truthy, 值得注意: 以下幾種也是 Truthy

- {}
- []
- Infinity
- -Infinity

Falsy 只有以下幾種:

- false
- null
- undefined
- 0
- NaN
- ''-""

轉換為 boolean

一些 framework 會指明 boolean 的 value, 例如 vue.js, 可以利由 !! 把 boolean expresson 轉換為 boolean value.

!!([]) // true
!!(1) // true
!!(undefined) // false
!!(0) // false

又或者為用 Boolean

Boolean([]) // true
Boolean(1) // true
Boolean(undefined) // false
Boolean(0) // false