You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:57:03