使用对象进行查找时遇测试问题,输出符合预期却报错
问题: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
相关产品推荐
相关产品推荐

