这是我参与8月更文挑战的第24天,活动详情查看:8月更文挑战
学习贵在坚持, 笔记是灵魂, 温故而知新, 时不时翻一翻, 回顾一下知识点, 加深记忆, 事半功倍!
前文我们学习了关于 JavaScript 中的 异常(报错)处理 try-catch
今天来学习 JavaScript 中的布尔(boolean)类型
JavaScript 布尔类型
用于区分仅有两种可能性的值, 布尔类型的值有两个: true(真) 和 false(假).
布尔值通常由比较运算符生成, 用在逻辑运算符操作上, 以及 三目运算/ if/ do...while/ for 等条件语句的使用.
当一个值为 true 或 false 时, 使用 typeof 进行判断, 返回的结果就是 布尔类型 boolean.
关系运算符
JavaScript 中的 关系运算符:
===等于!==不等于<小于<=小于等于>大于>=大于等于
我们在数学中的加减乘除, 左边等于右边就是 =, 而在 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 中, 还有一些更不可靠的比较运算符。
建议永远不要使用 == 和 !=。这两个运算符在进行比较之前会做一些强制的类型转换,所以比较结果很可能有误。
尽量永远不要用这两个运算符; 务必使用 === 和 !==。
逻辑运算符
逻辑 !/ || / &&, 其中后两个会出现 短路现象, 即会返回第一个运算值或第二个运算值
!非 --> 如果运算值为 真, 则运算结果为false, 否则为true&&与 --> 如果第一个运算值为假, 即返回第一个运算值; 否则返回第二个运算值||或 --> 如果第一个运算值为真, 则直接返回第一个运算值; 否则返回第二个运算值
逻辑 非
可以简化很复杂的逻辑表达式
!!p === p
如上, 在 JavaScript 中, 只有 p 是布尔类型的时候才成立. 如果 p 为其他类型的值, 那么 !!p 不一定等于 p, 而是等于 Boolean(p)
比较运算符的 互斥
比如 > 与 <= 互斥, < 与 >= 互斥. 所以 !(a > b) 可简化为: a <= b.
如果比较的两个值中有一个为 NaN, 那就不能简化了. 因为与 NaN比较直接返回 false, 没必要比较了
最后来看下这个, 小思考一下:
!(a && b) === !a || !b
!(a || b) === !a && !b
更多阅读
更多更文阅读请查收:
【数据结构】数据结构-对象和数组(二)数组 Array、 【数据结构】数据结构-对象和数组(一)对象 Object、 【数据结构】深入了解 JSON
【Node.js】文件系统模块、 【Node.js】HTTP 模块
【Node.js】安装&文档、 【工具准备】、 【开工】、 【详细步骤(四)】、 【模块处理工具(五)】、 【模块化编程的理解】
跟上节奏, 一步一步! 下文更新预告:
接下来会继续详细学习 JavaScript 的相关方法, 冲鸭!! xdm
学习用到的效率工具, 提高开发效率, 为我们的开发提效赋能!
跟上前进的步伐, 向前加油
加油!! go~~