为何不能用 boolean ?? boolean的方式进行逻辑判断?
const dragItemType: string = 'apple'
if (!(dragItemType === 'penci' ?? dragItemType === 'apple')) {
console.log('既不是penci也不是apple')
}else {
console.log('是penci或者apple的一种')
}
为何不能用 boolean ?? boolean的方式进行逻辑判断?
const dragItemType: string = 'apple'
if (!(dragItemType === 'penci' ?? dragItemType === 'apple')) {
console.log('既不是penci也不是apple')
}else {
console.log('是penci或者apple的一种')
}
啊?空值合并运算符(??) 判断的是 空值 而不是 假值 啊。
空值合并运算符(
??
)是一个逻辑运算符,当左侧的操作数为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 的值来执行相应的代码块。
13 回答13k 阅读
8 回答2.7k 阅读
2 回答5.2k 阅读✓ 已解决
5 回答1.3k 阅读
3 回答2.3k 阅读✓ 已解决
3 回答903 阅读✓ 已解决
5 回答1.6k 阅读✓ 已解决
你知道
??
是什么意思吗。你左侧的值永远是一个
boolean
,根据短路特性右侧的判断永远不会执行,你右侧那个判断没用