IF语句中!运算符含义及JS代码运行异常相关问题咨询
问题1:passengers.paid前的!是什么含义
!是JavaScript中的逻辑非运算符,作用是先将后方的值转为布尔类型,再对布尔结果取反:
- 若后方是布尔值,直接取反:
!true结果为false,!false结果为true - 若后方是其他类型值,会先完成布尔隐式转换再取反:比如
!undefined、!null、!0、!''的结果均为true
问题2:可以放在逻辑判断前的运算符还有哪些可选
常用的同类一元运算符如下:
!!:双重逻辑非,可将任意类型的值强制转换为对应的布尔原始值,效果和调用Boolean()方法完全一致typeof:返回操作值的类型字符串,常用在逻辑判断前做类型校验,比如typeof val === 'number'~:位非运算符,对数值按位取反,常用在数组存在性判断场景,比如~arr.indexOf('target')等价于数组内存在目标元素+:一元加运算符,可快速将值转为数字类型,常用于数值相关逻辑判断前的类型转换
问题3:Sue的paid属性为false,为什么代码运行后全部输出true
你的代码存在取值错误:passengers是存储所有乘客对象的数组,本身没有paid属性,所以passengers.paid的取值永远是undefined,undefined隐式转布尔值的结果为false,因此!passengers.paid的结果永远是true,每次判断都会进入第一个分支打印true。
如果要正常判断每个乘客的付费状态,只需要把判断条件修改为!passengers[i].paid,通过循环下标i取到当前遍历的乘客对象,再读取它的paid属性即可。
内容的提问来源于stack exchange,提问作者Vinn
相关产品推荐
相关产品推荐

