JavaScript中player_array[step].domino_set未定义错误的原因排查求助
问题分析与解决:
player_array[step].domino_set is undefined错误 嘿,我来帮你排查这个问题!你遇到的Error: player_array[step].domino_set is undefined错误其实根源很明确,咱们一步步拆解:
核心错误:player_array存储的是字符串而非对象
你定义的player_array是这样的:
var player_array = ['player0', 'player1', 'player2', 'player3'];
这里面装的是字符串'player0'、'player1',而不是你后面用Object.create(player)创建的player0、player1这些实际对象。当你在循环里用player_array[step]取到的是字符串,字符串自然没有domino_set属性,所以会抛出undefined错误。
其他需要修正的小问题
除了核心错误,代码里还有两个细节问题:
arrayAssign函数里的return this.die;是错误的:你应该直接返回变量die,而且这里的this指向也不对(直接调用函数时this在非严格模式下指向全局对象),完全不需要用this。domino_arrayCopy.splice(die, 1);参数错误:splice的第一个参数应该是元素的索引,而不是元素值。你已经用random拿到了正确的索引,所以应该改成splice(random, 1),否则会因为找不到对应元素导致删除失败,数组长度不会正确减少。
修正后的完整代码
var player = { user: 'CPU', order: 0, board: 'string', domino_set: [], player_order: '0' }; const domino_array = ['ZeroZero', 'ZeroTwo', 'ZeroThree', 'ZeroFour', 'ZeroFive', 'ZeroSix', 'OneZero', 'OneOne', 'OneTwo', 'OneThree', 'OneFour', 'OneFive', 'OneSix', 'TwoTwo', 'TwoThree', 'TwoSix', 'ThreeThree', 'ThreeSix', 'FourTwo', 'FourThree', 'FourFour', 'FourSix', 'FiveTwo', 'FiveThree', 'FiveFour', 'FiveFive', 'FiveSix', 'SixSix']; var domino_arrayCopy = [...domino_array]; // 用展开运算符复制数组更简洁 var player0 = Object.create(player); var player1 = Object.create(player); var player2 = Object.create(player); var player3 = Object.create(player); player0.user = "PC"; // 这里存储实际的player对象,不是字符串 var player_array = [player0, player1, player2, player3]; function diviArray() { function arrayAssign() { var random = Math.floor(Math.random() * domino_arrayCopy.length); var die = domino_arrayCopy[random]; domino_arrayCopy.splice(random, 1); // 用索引作为splice的第一个参数 return die; // 直接返回die变量 } for (let step = 0; step < player_array.length; step++) { for (let innerStep = 0; innerStep < 7; innerStep++) { player_array[step].domino_set.push(arrayAssign()); } } } diviArray();
这样修改后,代码就能正常将多米诺骨牌分配给每个玩家的domino_set数组了。
内容的提问来源于stack exchange,提问作者BlueConch
相关产品推荐
相关产品推荐

