数组对象中函数调用疑问:为何直接调用返回undefined?
解答你的TypeScript/JavaScript代码疑问
咱们逐个拆解你的问题,尽量讲得通俗易懂:
1. myDeck[pickCard(myDeck)]的含义
这行代码是先执行函数获取索引,再用索引取数组元素的合并写法:
- 第一步:调用
pickCard(myDeck),把myDeck数组作为参数传给函数; - 第二步:函数会生成一个0到2之间的随机整数(因为
myDeck里有3个元素),这个数就是数组的合法索引; - 第三步:用这个随机索引,从
myDeck里取出对应的卡牌对象。
简单说就是:让函数帮你随机选一个卡组位置,直接抽对应位置的牌。
2. 这种写法是否正确?
完全正确!这是JavaScript里很常见的简洁写法——把“生成索引”和“获取数组元素”两步合并成一行,语法和逻辑都没有问题,新手多写几次就能熟练掌握。
3. 为什么直接调用pickCard(myDeck)总是返回undefined?
从你贴的代码来看,正常情况下它不应该返回undefined:当传入的参数是数组(JS里数组属于object类型)时,函数里明确写了return pickedCard;,而pickedCard是合法的随机索引值。
可能是你测试时出了小问题,比如:
- 是不是复制代码时漏掉了
return pickedCard;这一行? - 控制台测试时,函数定义不完整,只复制了部分代码?
- 有没有不小心修改了函数逻辑,删掉了返回语句?
你可以把完整代码放到浏览器控制台或Node环境里测试,正常调用pickCard(myDeck)会返回0、1、2中的一个随机数。
再帮你梳理pickCard函数的完整逻辑
这个函数是个“双功能”工具:
- 当传入数组/对象时:返回随机索引,用来从卡组里选牌;
- 当传入数字时:把数字转换成对应的花色和牌面,返回包含
suit和card的卡牌对象。
比如pickCard(15)返回{ suit: "spades", card: 2 },是因为15除以13取整为1(对应suits[1]是spades),15取余13是2(对应牌面2)。
内容的提问来源于stack exchange,提问作者Marcos Moura
相关产品推荐
相关产品推荐

