为何不能用 boolean ?? boolean的方式进行逻辑判断?

为何不能用 boolean ?? boolean的方式进行逻辑判断?

const dragItemType: string = 'apple'

if (!(dragItemType === 'penci' ?? dragItemType === 'apple')) {
  console.log('既不是penci也不是apple')
}else {
  console.log('是penci或者apple的一种')
}

阅读 1.8k
4 个回答

你知道??是什么意思吗。

空值合并运算符(??)是一个逻辑运算符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。

你左侧的值永远是一个boolean,根据短路特性右侧的判断永远不会执行,你右侧那个判断没用

啊?空值合并运算符(??) 判断的是 空值 而不是 假值 啊。

空值合并运算符(??)是一个逻辑运算符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。

与逻辑或运算符(||)不同,逻辑或运算符会在左侧操作数为假值时返回右侧操作数。也就是说,如果使用 || 来为某些变量设置默认值,可能会遇到意料之外的行为。比如为假值(例如,''0)时。

你的这个需求不应该是

if (dragItemType === 'penci' || dragItemType === 'apple') {
  console.log('是penci或者apple的一种')
} else {
  console.log('既不是penci也不是apple')
}

或者

if (['penci', 'apple'].includes(dragItemType)) {
  console.log('是penci或者apple的一种')
} else {
  console.log('既不是penci也不是apple')
}

这样判断吗?

因为 ?? 运算符并不是用来做逻辑或(OR)操作的,你应该用 || 运算符

const dragItemType: string = 'apple'

if (!(dragItemType === 'penci' || dragItemType === 'apple')) {
  console.log('既不是penci也不是apple')
}else {
  console.log('是penci或者apple的一种')
}
新手上路,请多包涵

在给定的代码示例中,使用了 "?? " 运算符,该运算符在 JavaScript 中并不存在。"?? " 是 TypeScript 中的一个新特性,称为 Nullish Coalescing 运算符,用于判断一个值是否为 null 或 undefined,而不是用于逻辑判断。

如果您想要进行逻辑判断,可以使用逻辑运算符来完成。在您的代码示例中,可以使用逻辑运算符 || 和 && 进行条件判断,如下所示:

const dragItemType: string = 'apple';

if (!(dragItemType === 'pencil' || dragItemType === 'apple')) {
  console.log('既不是pencil也不是apple');
} else {
  console.log('是pencil或者apple的一种');
}

这样的逻辑判断会根据 dragItemType 的值来执行相应的代码块。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题