免责声明:这是学校实验室作业的一部分
更新:我希望将来保留它作为参考,因此我只删除代码部分。感谢所有提供帮助的人!你是一个很大的帮助
任务分配(总计):使用30个名人对象数组,以HTML / JS创建名人照片猜谜游戏。
当前状态:我正在用户猜测得到检查的部分。用户猜测在function checkUserGuess()
中被调用。如果匹配,则我调用displayOutPut("correct")
或("incorrect")
作为下一个函数function displayOutput(result)
的参数。它使用result
参数,并在switch语句中对其进行检查。为了争辩,我关心的代码是“不正确”的情况,而不是“正确”的情况,因为我不知道这些名人中的大多数。我故意将其用于测试目的不正确。
(名人随机选择:查理·卓别林)
观察:(根据我的屏幕截图),似乎名人数组已经被Charlie删除,尽管在控制台中读取到该数组的大小为30。这是在我{{1}之前查理不在数组中。 splice
数组确实收到了Charlie。并且,第三个数组显示了删除了Charlie的名人数组,并且大小更改为29。
什么是console.log:
washedupCelebs
对象randomCelebrity
数组,然后删除使用过的名人celebrities
数组以存储使用过的名人washedupCelebs
数组 问题:是否有理由在celebrities
发生之前查理被撤职?我应该担心这个吗?我觉得这没什么大不了的,但是我希望对此有所意见,以便继续前进。该功能似乎可以正常运行,但是看起来在某种程度上存在错误。
注释: -同学不愿看到这个帖子的机会,我不要 他们偷了我的代码。几个小时后,我将删除此帖子,因为 出于同样的原因。 -还有一件事,我知道我的教授是这里的主持人,所以,如果您看到此内容,我很乐意删除它并通过电子邮件将其发送给您。不知道您是否介意我这样做,因为我没有要求任何人实际为我完成任务。
代码:
已删除,可能需要进行复制
答案 0 :(得分:3)
TLDR:不信任控制台。
如果您记录一个对象/数组,它将被序列化(变成字符串),并且该序列化的版本将被打印到控制台中。
console.log([1, 2]); // [1, 2]
现在,对于更长的数组/嵌套对象,完整的序列化可能会导致打印非常长的字符串,这将需要时间。同样,长字符串可能并没有真正的帮助(您看不到森林中的树)。因此,控制台只会序列化阵列的一小部分,例如
Array(30) [...]
它只为您提供基本信息,只是数据类型(Array
)的长度(30
),内容被省略([...]
)。
所以实际上并没有魔术,在splice
数组长度为30
之前,之后为29
。
现在有个有用但令人困惑的>
。由于有时缩写的序列化不足以进行调试,因此需要完整版本。问题是,当您单击>
时,控制台不再知道您登录该对象/数组时的外观,因此它会序列化当前状态对象/数组。因此,在展开的部分中,您会看到两次拼接的版本,因为单击>
时已经将其拼接出来。
现在要获取当时的序列化版本,可以自己对其进行序列化:
console.log( JSON.stringify(array) );
或克隆数组以存储其状态:
console.log( array.slice() );
答案 1 :(得分:0)
看起来您只是从JS开始。
嗯,对我来说一切都很好。
原因是登录控制台时console.log正在使用对阵列的引用。
在拼接之前,不会从代码中删除名人。
在调用拼接时,名人将被删除,并且所有带有该数组引用的console.log都会显示最新值。
console.log(celebrities.length) --> 30
。
console.log(celebrities.length) --> 29
celebrities.splice(index, 1);
我建议您在调试器中运行代码,以更好地了解正在发生的事情。