发表于: 2019-10-03 22:30:03

1 506


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)

这是出现上图name未定义的代码

//死亡后显示身份的信息
let b = dieNumber;
console.log(typeof b,dieNumber)
    if (step !== 0) {
        for (let s = 0s < steps++) {
            dieNumber = s;
            if ((s+1+ 1% 2 === 0) {
            // console.log(typeof b, (b+1) - 1)
                    $('.add').eq(s).after(`<p b+1}号被大家投死,他的身份是${transmit[b].name}</p>`);
                    console.log(transmit[b+1].name)
                }
        }
}

          还是昨天日报中遇到的第二个问题,找到了原因,并不是我理解的那个原因。

        首先使用sessionStorage存储的值是没有问题的,因为是null,所以打印出来的数据类型是object对象。为什么会出现null值,我找到的原因是因为我写的代码没有判断当前页面还是杀手杀完人后再去执行这个代码,所以我以为是因为这里没有加判断条件,按照游戏的步骤一步一步过来所以没有进行杀手杀人就for循环渲染了页面,这个时候dieNumber这个值的数据还没有传过来,打印的数据类型是null,dieNumber的值是0,因为找不到name属性的索引,所以执行到下面的代码就出现了上图中的name属性未定义的报错。

        然后我以为是这里的原因,为了查找就把渲染的这行代码注释了,

// $('.add').eq(s).after(`<p
然后就能正常跳到杀手杀人的页面不会报错,选择要杀的人后回到法官日志页面,这个时候打印出来的值是number,是有数字的,但是还是无法渲染,后面我以为是函数调用的作用域的问题,我把存储的数据sessionStorage放到按钮点击事件里在刷新下就能渲染出来了。
function JumpStorage() {
sessionStorage.setItem('transmit',JSON.stringify(transmit));
sessionStorage.setItem('dieNumber',JSON.stringify(dieNumber));
sessionStorage.setItem('step',step);
sessionStorage.setItem('day',day);
}
      这里是我储存的值,JumpStorage()这个函数调用进这个点击事件了
//点击杀人页面给按钮添加点击事件控制页面跳转
$('button').click(function () {
然后结果还是渲染不出来,我以为是这个作用域的原因,其实不是的。

       其实这两个问题可以理解为一个问题,首先上面写渲染身份信息的for循环里我用了杀手杀人页面的数据,所以在导致游戏一步步点过来的时候就出现这种null值,所以这里师兄的建议是最好每个页面都是用当前页面的数据来写判断条件,因为我用了其他页面的数据就会出现这个问题,所以一系列的才会b = dieNumber,他们的值是为0,判断条件为false,才会找不到name属性索引对应的身份信息,就会显示name为undefined。


    下面那个问题为什么我以为是作用域的问题,为什么不调用函数直接把sessionStorage的数据写进按钮点击事件里,就又可以渲染了,如下图:
这个是我调用JumpStorage()这个函数名的时候,在法官日志页面是没有渲染游戏结果的,后面我把sessionStorage存储的dieNumber这个放进按钮点击事件后就能渲染了,但是这个原因只是我以为,后面师兄指出不是那个函数名调用的问题,发生这种错觉是因为我在杀手杀人页面点击的第二个身份才能渲染,因为点杀1号,这里b的值是0,
if (step !== 0 && b ) { //‘&&’含义是并且这个必须是两边都为true才能执行。

 因为这里if语句判断条件为false,所以下面的代码就不会执行,所以才会没有渲染出来。所以我问了师兄我调用的函数名这种方式是可行的,


下图是我从2号开始杀,然后就能渲染了,因为这里b的值是1。



       这两张图就很明显了,还是因为缺少判断条件的问题。这里b打印出来的值是1,我杀的是2号所以就能显示渲染出结果。b值为1所以使用&&两边的值都为true就能执行if语句下面的for循环了。所以这里需要添加一个判断,把b=0这种情况也要包进去。
if (step !== 0 && (b || b == 0)) { //‘&&’含义是并且这个必须是两边都为true才能执行。 ‘||’含义或者只要一边为true就整个为true。
所以这里就用了||这个而且的判断符号就解决了。
其实说白了会出现这个问题就是写的时候掺杂了另一个页面的数据,所以才导致这个原因,所以师兄给我说的单独页面开发最好是使用当前页面里的数据来写,不然就会出现我遇到的这种问题。独立页面的开发测试理解又清楚了些。




返回列表 返回列表
评论

    分享到