JavaScript中的布尔类型 Boolean

685 阅读4分钟

这是我参与8月更文挑战的第24天,活动详情查看:8月更文挑战

学习贵在坚持, 笔记是灵魂, 温故而知新, 时不时翻一翻, 回顾一下知识点, 加深记忆, 事半功倍!

前文我们学习了关于 JavaScript 中的 异常(报错)处理 try-catch

今天来学习 JavaScript 中的布尔(boolean)类型

JavaScript 布尔类型

用于区分仅有两种可能性的值, 布尔类型的值有两个: true(真) 和 false(假).

布尔值通常由比较运算符生成, 用在逻辑运算符操作上, 以及 三目运算/ if/ do...while/ for 等条件语句的使用.

当一个值为 truefalse 时, 使用 typeof 进行判断, 返回的结果就是 布尔类型 boolean.

关系运算符

JavaScript 中的 关系运算符:

  1. === 等于
  2. !== 不等于
  3. < 小于
  4. <= 小于等于
  5. > 大于
  6. >= 大于等于

我们在数学中的加减乘除, 左边等于右边就是 =, 而在 JavaScript 中, 相等运算符居然不是等号(=)而是三等号(===). 不等运算符也不是不等号(“≠”),而是叹号加双等号(!==).

这些运算符在多数情况下有明确的语义,而有时候却令人困惑且毫无意义。比如下面这些比较结果, 是不是不可思议?

11 竟然小于 2, 数值和字符串竟然也可以比较大小(隐式类型转换了).

'11' < '2' // true
'2' < 5 // true
5 < '11' // true

undefined > null // false
undefined < null // falee
undefined === null // falee

NaN === NaN // false
NaN !== NaN // true

JavaScript 中只有一个值不等于它自己, 那就是上面的 NaN啦. NaN 应该表示 无意义计算的结果, 所以它不等于任何其他无意义计算的结果. ps: 是不是很拗口...

除了两个操作数都为 NaN 之外,===!== 的结果基本上都是正确的。

这两个运算符可用于确定一个值是否为 nul1 或者 undefined, 以及除了 NaN 之外的任何值。但如果要判断一个值 x 是不是 NaN,请使用 Number.isNaN(x)

除非肯定值的大小在安全整数范围内,否则不要通过 === 的条件判断来结束循环。即使在安全整数范围内,还是推荐使用 >=

console.log('Apple' < 'TwoOneThree') // ->  true
console.log('Apple' != 'TwoOneThree') // ->  true
console.log('Apple' == 'TwoOneThree') // ->  false

如上 字符串可以用相同的方式进行比较, 排序的方式大致是字母顺序, 更准确地说是按它们的 Unicode代码进行比较的. 大写字母 小于 小写字母.

当两个值都为字符串或者都为数值的时候,<<=>>=的结果都是准确的。不过在其他情况下,这些比较大多是无意义的。 JavaScript 并不会阻止你比较不同的类型,这些情况需要你自行规避。所以要尽可能避免在不同类型之间进行比较。

JavaScript 中, 还有一些更不可靠的比较运算符。

建议永远不要使用 ==!=。这两个运算符在进行比较之前会做一些强制的类型转换,所以比较结果很可能有误。

尽量永远不要用这两个运算符; 务必使用 ===!==

逻辑运算符

逻辑 !/ || / &&, 其中后两个会出现 短路现象, 即会返回第一个运算值或第二个运算值

  1. ! 非 --> 如果运算值为 真, 则运算结果为 false, 否则为 true
  2. && 与 --> 如果第一个运算值为假, 即返回第一个运算值; 否则返回第二个运算值
  3. || 或 --> 如果第一个运算值为真, 则直接返回第一个运算值; 否则返回第二个运算值

逻辑 非

可以简化很复杂的逻辑表达式

!!p === p

如上, 在 JavaScript 中, 只有 p 是布尔类型的时候才成立. 如果 p 为其他类型的值, 那么 !!p 不一定等于 p, 而是等于 Boolean(p)

比较运算符的 互斥

比如 ><= 互斥, <>= 互斥. 所以 !(a > b) 可简化为: a <= b.

如果比较的两个值中有一个为 NaN, 那就不能简化了. 因为与 NaN比较直接返回 false, 没必要比较了

最后来看下这个, 小思考一下:

!(a && b) === !a || !b
!(a || b) === !a && !b

更多阅读

更多更文阅读请查收:

【JS】异常(报错)处理 try-catch

【JS】中各种神奇的 bug

【数据结构】数据结构-对象和数组(二)数组 Array【数据结构】数据结构-对象和数组(一)对象 Object【数据结构】深入了解 JSON

【Node.js】文件系统服务器-模拟接口

【Node.js】文件系统模块【Node.js】HTTP 模块

【Node.js】效率工具-nvm & nrm 等

【Node.js】包管理工具 npm & yarn 的使用

【Node.js】搭建自动化开发环境-基本介绍

【Node.js】安装&文档【工具准备】【开工】【详细步骤(四)】【模块处理工具(五)】【模块化编程的理解】

【Github】多人协作(二)【Github】基本使用(一)

【Git】代码版本控制-git 初识&基本操作(一)【Git】进阶(二)

跟上节奏, 一步一步! 下文更新预告:

接下来会继续详细学习 JavaScript 的相关方法, 冲鸭!! xdm

学习用到的效率工具, 提高开发效率, 为我们的开发提效赋能!

跟上前进的步伐, 向前加油

加油!! go~~