[Day18] - 真值与假值

什麽是真值与假值

在 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


<<:  【Day 18】今日 git 小复习

>>:  # [Day17] 建立订单交易API_11

[Day29] 除错(debug)的心得

今天来分享一下我自己如何除错,出错很正常(对我来说啦QWQ),但是发现有错,很重要的是,要知道自己错...

Elastic Stack第二十八重

Filebeat 本篇接续上一重,来浏览建置完成的kibana dashboard View you...

Day18 JavaScript基本教学(三)

动态网页概念 DHTML是 Dynamic HTML 的简称,相较於 HTML 它更强调网页的动态表...

【在 iOS 开发路上的大小事-Day07】除了用 WKWebView 以外,还可以如何在 App 中显示 PDF 档案呢?

前情提要 一般我们要在 App 中显示 PDF 档案,可能会透过 WKWebView 来进行实作 最...

Day-10 回圈

正如人需要重复呼吸。在程序中,多数时候都与「重复进行某动作」有关,而这,就是回圈。视执行次数、过程与...