JS-数据类型-布尔值boolean

参考文章:布尔值

布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示。布尔值只有这两个值。

下列运算符会返回布尔值:

  1. 前置逻辑运算符: ! (Not)
  2. 相等运算符:===,!==,==,!=
  3. 比较运算符:>,>=,<,<=

如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true

  1. undefined
  2. null
  3. false
  4. 0
  5. NaN
  6. ""或''(空字符串)
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean('') // false
Boolean(NaN) // false

Boolean(1) // true
Boolean('false') // true
Boolean([]) // true
Boolean({}) // true
Boolean(function () {}) // true
Boolean(/foo/) // true
  • 布尔值往往用于程序流程的控制,请看一个例子。
if ('') {
  console.log('true');
}
// 没有任何输出

上面代码中,if条件里面需要传入布尔值,所以''被自动转换成了对应的Booleanfalse,导致程序不会进入代码块,所以没有任何输出。

  • 注意,空数组([])和空对象({})对应的布尔值,都是true
if ([]) {
  console.log('true');
}
// true

if ({}) {
  console.log('true');
}
// true
  • &&运算是与运算,只有所有都为true&&运算结果才是true
true && true; // 这个&&语句计算结果为true
true && false; // 这个&&语句计算结果为false
false && true && false; // 这个&&语句计算结果为false
  • ||运算是或运算,只要其中有一个为true||运算结果就是true
false || false; // 这个||语句计算结果为false
true || false; // 这个||语句计算结果为true
false || true || false; // 这个||语句计算结果为true
  • !运算是非运算,它是一个单目运算符,把true变成falsefalse变成true
! true; // 结果为false
! false; // 结果为true
! (2 > 5); // 结果为true
  • 实际上,JavaScript允许对任意数据类型做比较:
false == 0; // true
false === 0; // false
  • 要特别注意相等运算符==JavaScript在设计时,有两种比较运算符:

第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;

第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。

由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较。

  • 另一个例外是NaN这个特殊的Number与所有其他值都不相等,包括它自己:
NaN === NaN; // false

唯一能判断NaN的方法是通过isNaN()函数:

isNaN(NaN); // true
  • 要注意浮点数的相等比较:
1 / 3 === (1 - 2 / 3); // false

这不是JavaScript的设计缺陷。浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:

Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true
  • 要将一个值转换为对应的Boolean值,可以调用转型函数Boolean():
var message = "Hello world!";
var messageAsBoolean = Boolean(message);
console.log(messageAsBoolean); //true

对于一些特殊值Boolean对象前面加不加new,会得到完全相反的结果,必须小心。

if (Boolean(false)) {
  console.log('true');
} // 无输出

if (new Boolean(false)) {
  console.log('true');
} // true

if (Boolean(null)) {
  console.log('true');
} // 无输出

if (new Boolean(null)) {
  console.log('true');
} // true
  • 顺便提一下,使用双重的否运算符(!)也可以将任意值转为对应的布尔值。
!!undefined // false
!!null // false
!!0 // false
!!'' // false
!!NaN // false

!!1 // true
!!'false' // true
!![] // true
!!{} // true
!!function(){} // true
!!/foo/ // true

你可能感兴趣的:(JS-数据类型-布尔值boolean)