uts判断有问题,字符串 1 不等于 字符串1

uts判断有问题,字符串 1 不等于 字符串1

操作步骤:

看图

预期结果:

看图

实际结果:

看图

bug描述:

在uni-app x中,uvue文件里,<script setup lang="uts"> 模式下出现的问题
不理解

信息项 描述
产品分类 uniapp/App
PC开发环境 Mac
PC开发环境版本 26.2
HBuilderX类型 正式
HBuilderX版本 4.87
手机系统 Android
手机系统版本 Android 12
手机厂商 模拟器
手机机型 模拟器
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

Image
Image
Image
Image
Image


8 回复

该bug反馈内容不完整:BUG描述仅"不理解",缺乏具体问题现象、代码示例及详细复现步骤(仅提示"看图"但未提供图片或文字说明);预期结果与实际结果均未明确描述,导致无法准确复现问题。分类信息虽包含开发环境(HBuilderX 4.87)和目标平台(Android 12),但关键代码缺失。
经分析,此问题很可能不成立。UTS是强类型语言,字符串"1"与数字1属于不同类型,比较结果为不相等是符合语言规范的正常行为(不同于JavaScript弱类型比较中"1"==1为true的情况)。知识库中明确说明UTS需遵循强类型规则,且HBuilderX 4.87版本已修复多项编译器问题,但无字符串比较异常记录。用户可能混淆了UTS与JavaScript的类型处理机制。
建议用户补充完整可复现代码,确认是否因类型误用导致问题。参考UTS编译器已知问题文档,重点检查类型定义是否正确。若需类型转换,应显式调用String()或Number()方法,而非依赖隐式转换。 内容为 AI 生成,仅供参考


你用的是 三个等号 判断的吗?

两个等号就可以了,但是,我记得,好像不能两个等号呀,之前有次用两个等号,编译没通过。

理论上来说,两个变量的类型都是一样的,应该没有两个和三个等号的区分。何况uts还是强类型的,这应该是属于bug。

回复 仔仔_iZaiZaiA: 三个等号在 Android原生环境(java )中有特殊含义,会用来比较内存地址,这样就会与你的预期不一致了。 参考这个https://doc.dcloud.net.cn/uni-app-x/uts/type-compatibility.html#void-undefined%E7%B1%BB%E5%9E%8B

回复 DCloud_Android_DQQ: ok,明白了,谢谢

在 uni-app x 的 uvue 文件中,使用 <script setup lang="uts"> 时,字符串比较确实需要注意。UTS(Uni TypeScript)是强类型语言,其字符串比较行为可能与 JavaScript/TypeScript 不同。

根据你提供的截图信息,问题可能出现在以下几个方面:

  1. 字符串不可变性:UTS 中字符串是不可变类型,直接使用 ===== 比较时,比较的是字符串对象引用而非内容值。需要使用 equals() 方法进行内容比较。

  2. 编码或空格问题:虽然看起来都是"1",但可能存在不可见的编码差异、空格或特殊字符。建议使用 trim() 方法去除首尾空格后再比较。

  3. 类型推断问题:确保比较的两个值都是明确的 String 类型,避免类型自动转换导致的意外行为。

正确的比较方式应该是:

let str1: string = "1"
let str2: string = "1"
console.log(str1.equals(str2)) // 应该返回 true
回到顶部