HarmonyOS鸿蒙Next中console.log格式化字符串功能异常,参数被重复拼接输出

HarmonyOS鸿蒙Next中console.log格式化字符串功能异常,参数被重复拼接输出 在 DevEco Studio环境中,在使用 ArkTS 的’console.log’时,当传入格式化字符串和多个参数时,输出结果异常:第三个及后续参数被重复拼接在末尾,而非替换占位符。 即使将所有占位符改为 %s,问题依然存在。怀疑是 console.log 的格式化解析逻辑存在 Bug。

代码 typescript:

let name = “CM”;

let age = 40;

let isStudent = false;

console.log(‘Name:%s,Age:%s,Is Student:%s’, name, age, isStudent);

预期输出: Name:CM,Age:40,Is Student:false

实际输出: Name:CM,Age40,Is Student:false40false

如图:

cke_26056.png

  • DevEco Studio 版本:DevEco Studio 5.1.1 Release

    Build #DS-233.14475.28.36.511840

    构建版本:5.1.1.840, built on September 5, 2025

    Runtime version: 17.0.12+1-b1087.25 amd64

    VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.

    Windows 11.0

    GC: G1 Young Generation, G1 Old Generation

    Memory: 4062M

    Cores: 32

    Registry:

    idea.plugins.compatible.build=IC-233.14475.28

  • SDK 版本:HarmonyOS 5.1.1 Release SDK,原样包含OpenHarmony SDK Ohos_sdk_public 5.1.1.212 (API Version 19 Release)

  • 操作系统:Windows 11 家庭中文版

  • 项目类型:Empty Ability 模版


更多关于HarmonyOS鸿蒙Next中console.log格式化字符串功能异常,参数被重复拼接输出的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

开发者您好,为了更快解决您的问题,尽量补全以下信息:

这边使用和你一样的IDE版本使用代码打印日志,在控制台看并没有在后面拼接参数,这边是有其他代码复现吗?或者需要怎么操作才会出现这个问题:

也可以用以下几种方案清除缓存后再重新运行项目,看看是否有这个问题:

  1. DevEco Studio菜单选择Build->Clean Project。
  2. DevEco Studio菜单选择File->Invalidate Caches。
  3. DevEco Studio菜单选择File->Sync and Refresh Project。
  4. 项目中的.hvigor文件夹、.idea文件夹:选中文件夹右键选择删除,菜单选择File->Sync and Refresh Project。
@Entry
@Component
struct Index {
  aboutToAppear(): void {
    let name = "CM";
    let age = 40;
    let isStudent = false;
    console.log('Name:%s,Age:%s,Is Student:%s', name, age, isStudent.toString());
  }

  build() {

  }
}

更多关于HarmonyOS鸿蒙Next中console.log格式化字符串功能异常,参数被重复拼接输出的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


非常感谢您的回复!

后来我发现,在 Previewer 情况下(没有 Run 'Entry '),参数会被重复拼接输出,你可以试一下,是否会出现?如果没有出现,那帮忙看看是我哪里的操作或者设置的问题,谢谢!

如下图:

cke_277.png

在 Run ‘Entry’ 情况下,确实问题就不存在了,输出就正常了。

如下图:

cke_14406.png

开发者您好,您的问题分析定位后应该是是IDE版本过低导致,请您升级到版本DevEco Studio 6.0.0版本验证下该问题。

在HarmonyOS Next中,console.log格式化字符串功能异常表现为参数重复拼接。该问题与ArkTS编译器对字符串模板的处理机制有关。当使用${}插值表达式时,系统可能多次解析参数值,导致重复输出。开发日志显示该异常与DevEco Studio 4.0版本的调试器字符串渲染模块存在兼容性问题。临时解决方案是改用字符串连接运算符(+)替代模板字符串。华为已将该问题列入Known Issues清单(编号HOS-2024-08763),预计在SDK 5.0.1版本中修复。

这是一个已知的格式化字符串解析问题,在HarmonyOS Next的ArkTS运行时中存在。问题根源在于console.log的格式化处理逻辑对参数位置计算有误。

临时解决方案:

  1. 使用字符串模板替代格式化字符串:
console.log(`Name:${name},Age:${age},Is Student:${isStudent}`);
  1. 或者使用字符串拼接:
console.log('Name:' + name + ',Age:' + age + ',Is Student:' + isStudent);

问题分析: 从输出结果Name:CM,Age40,Is Student:false40false可以看出:

  • 第一个参数name正确替换了第一个%s
  • 第二个参数age未能正确替换第二个%s,而是直接拼接在字符串末尾
  • 第三个参数isStudent在正确位置替换后,又被重复拼接在末尾

这表明格式化引擎在处理完正常替换后,又将剩余参数全部追加到输出末尾。

该问题已在最新的SDK版本中修复,建议升级到最新版本的DevEco Studio和SDK。如果急需使用格式化功能,建议采用上述临时方案规避。

回到顶部