Skip to content

封装自定义真假值

js
fakeValue(val) {
  // 封装自定义假值
  if (val == null) return false;
  else if (val === "") return false;
  else if (val === 0) return true;
  else if (val === "0") return true;
  else if (Object.is(val, NaN)) return false;
  else if (val === "NaN") return false;
  else if (!val) return false;
  else return true;
}
fakeValue(val) {
  // 封装自定义假值
  if (val == null) return false;
  else if (val === "") return false;
  else if (val === 0) return true;
  else if (val === "0") return true;
  else if (Object.is(val, NaN)) return false;
  else if (val === "NaN") return false;
  else if (!val) return false;
  else return true;
}

JavaScript的任何值都可以转换为布尔值

以下这些值都会转换为布尔值false:

js
undefined
null
0
-0
NaN
""
undefined
null
0
-0
NaN
""
  • 其他所有值,包括所有对象(数组)都转换为布尔值true

  • 布尔值有toSting()方法,可以将自己转换为字符串"true"或"false"

  • 三种布尔值操作符(逻辑操作符):

  1. && 当且仅当两个操作数都为真时,求值结果才是真;任何一个操作数为假,结果都为假。
  2. || 任何一个操作数为真,求值结果就是真;只有当两个操作数均为假时,结果才是假。
  3. ! 取反

判断一个变量是否为 NaN

js
// 1. 利用 NaN 是唯一一个不等于自身的特点
function _isNaN(val) {
  if (val !== val) {
    return true
  }
  return false
}
// 2. 利用 ES6 中提供的 Object.is() 方法
var a = 'string'
var b = 2
var c = a / b // NaN

Object.is(a, NaN) // false
Object.is(b, NaN) // false
Object.is(c, NaN) // true

// 3. 使用 isNaN (并不推荐)
function _isNaN(val) {
  if (typeof val === 'number' && isNaN(val)) {
    return true
  }
  return false
}
// 1. 利用 NaN 是唯一一个不等于自身的特点
function _isNaN(val) {
  if (val !== val) {
    return true
  }
  return false
}
// 2. 利用 ES6 中提供的 Object.is() 方法
var a = 'string'
var b = 2
var c = a / b // NaN

Object.is(a, NaN) // false
Object.is(b, NaN) // false
Object.is(c, NaN) // true

// 3. 使用 isNaN (并不推荐)
function _isNaN(val) {
  if (typeof val === 'number' && isNaN(val)) {
    return true
  }
  return false
}

探究真假值

js
// 真值
    console.log(Boolean(true))
    console.log(Boolean({}))
    console.log(Boolean([]))
    console.log(Boolean(123))
    console.log(Boolean('foo'))
    console.log(Boolean(new Date()))
    console.log(Boolean(-123))
    console.log(Boolean(3.14))
    console.log(Boolean(-3.14))
    console.log(Boolean(Infinity))
    console.log(Boolean(-Infinity))

    // 假值
    console.log(Boolean(false))
    console.log(Boolean(null))
    console.log(Boolean(undefined))
    console.log(Boolean(0))
    console.log(Boolean(0n))
    console.log(Boolean(NaN))
    console.log(Boolean(''))
    console.log(Boolean(""))
    console.log(Boolean(document.all))
    console.log(Boolean())
    console.log(Boolean())
// 真值
    console.log(Boolean(true))
    console.log(Boolean({}))
    console.log(Boolean([]))
    console.log(Boolean(123))
    console.log(Boolean('foo'))
    console.log(Boolean(new Date()))
    console.log(Boolean(-123))
    console.log(Boolean(3.14))
    console.log(Boolean(-3.14))
    console.log(Boolean(Infinity))
    console.log(Boolean(-Infinity))

    // 假值
    console.log(Boolean(false))
    console.log(Boolean(null))
    console.log(Boolean(undefined))
    console.log(Boolean(0))
    console.log(Boolean(0n))
    console.log(Boolean(NaN))
    console.log(Boolean(''))
    console.log(Boolean(""))
    console.log(Boolean(document.all))
    console.log(Boolean())
    console.log(Boolean())