iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
自我挑戰組

重新開始 JavaScript系列 第 18

[Day18] - 真值與假值

  • 分享至 

  • xImage
  •  

什麼是真值與假值

在 JavaScript 中,除了布林值本身就是真值或假值外,其他型別會在布林的執行環境中轉換成為 真值假值

以以下程式碼為例:

數值 1 為真值,轉換為 true,所以執行 if 判斷式

if (1) {
    console.log('執行 if 判斷式');
}
// 執行 if 判斷式

需要要注意的是 - 不要把真假值與隱含轉型混淆

字串 1 雖然在寬鬆相等中會因自動轉型而與 布林值 true 相等,但此例中是因 字串 1 使真值,所以執行 if 判斷式

if ('1') {
    console.log('執行 if 判斷式');
}
// 執行 if 判斷式

數值 5 也因是真值,所以執行 if 判斷式,與是否等同 布林值 true 無關

console.log(1 == true); // true
console.log(5 == true); // false

if (5) {
    console.log('執行 if 判斷式');
}
// 執行 if 判斷式

真值 Truthy

真值大概有以下幾種:

  • 布林值 true
  • 除了 0 以外的數值(包含負值)
  • 非空字串的字串
  • Infinity、-Infinity
  • 陣列
  • 物件

以下列舉幾個當作範例:

除了 0 以外的數值(包含負值)

除了 0 以外的數值,包含負值皆為真值

if (5) {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 if 判斷

if (-7) {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 if 判斷

非空字串的字串

任何非空字串的字串皆為真值

if ('abc') {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 if 判斷

if ('0') {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 if 判斷

if ('false') {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 if 判斷

陣列

所有陣列皆為真值

if ([1]) {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 if 判斷

// 空物件
if ([]) {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 if 判斷

物件

所有物件皆為真值

if ({a: 1}) {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 if 判斷

// 空物件
if ({}) {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 if 判斷

包裹物件

因包裹物件為物件形式,而物件為真值所以包裹物件也為真值

雖然 0 為假值,但因包裹物件所以為真值

if (new Number(0)) {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 if 判斷

雖然 false 為假值,但因包裹物件所以為真值

if (new Boolean(false)) {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 if 判斷

假值 Falsy

假值大概有以下幾種:

  • 布林值 false
  • 數值 0
  • 空字串
  • null
  • undefined
  • NaN

以下列舉幾個當作範例:

數值 0

if (0) {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 else 判斷

'' 空字串

if ('') {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 else 判斷

null、undefined、NaN

if (null) {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 else 判斷

if (undefined) {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 else 判斷

NaN

if (NaN) {
    console.log('執行 if 判斷');
} else {
    console.log('執行 else 判斷');
}
// 執行 else 判斷

關於真假值圖表可看 JavaScript Equality Table

參考文獻

六角學院 - JavaScript 核心篇

MDN - Truthy(真值)

JavaScript Equality Table


上一篇
[Day17] 強制轉型
下一篇
[Day19] 邏輯運算子
系列文
重新開始 JavaScript32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言