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

使用对象进行查找时遇测试问题,输出符合预期却报错

问题:phoneticLookup函数传入空字符串时测试不通过的原因分析

我编写了一个使用对象实现查找功能的phoneticLookup函数,当传入空字符串""时,控制台输出undefined,符合预期,但测试提示phoneticLookup("")应等于undefined却报错,想知道问题出在哪?

代码如下:

// Setup
function phoneticLookup(val) {
    let result = "";
  
    // Only change code below this line
  
    const lookup = {
      "": undefined,
      "alpha": "Adams",
      "bravo": "Boston",
      "charlie": "Chicago",
      "delta": "Denver",
      "echo": "Easy",
      "foxtrot": "Frank",
    }
    const value = lookup[val]
    result += value;
    // Only change code above this line
    return result;
  }
  console.log(phoneticLookup(""))

测试信息:

// running tests
phoneticLookup("") should equal undefined
// tests completed
// console output
undefined

问题原因及解决方法

问题出在result += value这一步:

  • 初始result被赋值为空字符串"",当value是undefined时,字符串拼接操作会自动把undefined转换为字符串"undefined",所以函数最终返回的是字符串类型的"undefined",而不是测试要求的原始undefined值,这就导致测试不通过。

修改方案一(推荐):直接返回查找结果

去掉多余的result变量,直接返回对象的查找值:

function phoneticLookup(val) {
    const lookup = {
      "": undefined,
      "alpha": "Adams",
      "bravo": "Boston",
      "charlie": "Chicago",
      "delta": "Denver",
      "echo": "Easy",
      "foxtrot": "Frank",
    }
    return lookup[val];
}

修改方案二:调整result的初始化与赋值方式

如果需要保留result变量,不要初始化为空字符串,直接赋值而不是拼接:

function phoneticLookup(val) {
    let result; // 不初始化空字符串
  
    const lookup = {
      "": undefined,
      "alpha": "Adams",
      "bravo": "Boston",
      "charlie": "Chicago",
      "delta": "Denver",
      "echo": "Easy",
      "foxtrot": "Frank",
    }
    const value = lookup[val];
    result = value; // 直接赋值,避免字符串拼接
    return result;
}

内容的提问来源于stack exchange,提问作者Arrow3847

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:15:09