1

在设置数组时使用变量时,我通过一段脚本遇到错误。如果我只是用它们拥有的数值替换变量(我已经验证过),我不会收到错误消息。

设置这样的数组有什么问题吗?

arrayOfData = new Array(
            [leftAmount, 'Get', '#2697C9'],
            [middleAmount, 'Neutral', '#E7E7E7'],
            [rightAmount, 'Don\'t Get', '#EB5830']
        );

如果有帮助,您可以查看整个功能

function generateChart(viewerObj){

        if(viewerObj.getActiveUsers){
            var leftAmount = viewerObj.getActiveUsers;
        }
        else{
            window.leftAmount = 0;
        }
        if(viewerObj.getActiveUsers){
            var middleAmount = viewerObj.getActiveUsers;
        }
        else{
            var middleAmount = 0;
        }
        if(viewerObj.dontGetActiveUsers){
            var rightAmount = viewerObj.dontGetActiveUsers;
        }
        else{
            var rightAmount = 0;
        }

        arrayOfData = new Array(
            [leftAmount, 'Get', '#2697C9'],
            [middleAmount, 'Neutral', '#E7E7E7'],
            [rightAmount, 'Don\'t Get', '#EB5830']
        );

        $('.divGraph').jqBarGraph({ data: arrayOfData }); 
    }
4

3 回答 3

1

我能看到的唯一潜在问题是大多数时候你有......

var variable_name

...在ifelse中,但有一次你有这个...

if(viewerObj.getActiveUsers){
    var leftAmount = viewerObj.getActiveUsers;
}
else{
    window.leftAmount = 0;
}

...因此,当if条件失败时,本地leftAmount将是undefined,并且将遮蔽leftAmount具有0值的全局。

我猜想无论您在哪里使用该数组,它都不undefined喜欢0.


更改window.leftAmountvar leftAmount或更好,将您的变量声明移动到函数的顶部。

function generateChart(viewerObj){
    var leftAmount = 0, middleAmount = 0, rightAmount = 0;

    if(viewerObj.getActiveUsers)
        leftAmount = viewerObj.getActiveUsers;

    if(viewerObj.getActiveUsers)
        middleAmount = viewerObj.getActiveUsers;

    if(viewerObj.dontGetActiveUsers)
        rightAmount = viewerObj.dontGetActiveUsers;

    arrayOfData = new Array(
        [leftAmount, 'Get', '#2697C9'],
        [middleAmount, 'Neutral', '#E7E7E7'],
        [rightAmount, 'Don\'t Get', '#EB5830']
    );

    $('.divGraph').jqBarGraph({ data: arrayOfData }); 
}

这里我也在顶部设置了默认初始化。如果您愿意,可以将其移回else,或者您可以使用条件运算符...

rightAmount = viewerObj.dontGetActiveUsers ? viewerObj.dontGetActiveUsers : 0;

或者,由于您正在进行基本的真假测试,您可以这样做......

rightAmount = viewerObj.dontGetActiveUsers || 0;
于 2012-08-03T23:03:57.253 回答
0

我能发现的唯一奇怪之处是您使用window.leftAmount. 你为什么这么写?如果viewerObj.getActiveUsers现在不真实,则局部变量leftAmount将为undefined.

OR但是,您可以使用运算符而不是各种 if 子句来大大缩短脚本(它是如何工作的):

var arrayOfData = [
  [viewerObj.getActiveUsers || 0, 'Get', '#2697C9'],
  [viewerObj.getActiveUsers || 0, 'Neutral', '#E7E7E7'],
  [viewerObj.dontGetActiveUsers || 0, 'Don\'t Get', '#EB5830']
];

$('.divGraph').jqBarGraph({ data: arrayOfData }); 
于 2012-08-03T23:09:50.550 回答
-1

您正在使用var将这些变量的范围限制为 if/else 块,然后尝试使用该范围之外的变量,这会导致它们未定义。我建议在您尝试使用它们的同一范围内声明变量。

function generateChart(viewerObj){

        var leftAmount = 0, middleAmount = 0, rightAmount = 0; // declare variables in this scope.

        if(viewerObj.getActiveUsers){
           leftAmount = middleAmount = viewerObj.getActiveUsers;
        }

        if(viewerObj.dontGetActiveUsers){
           rightAmount = viewerObj.dontGetActiveUsers;
        }

        arrayOfData = new Array(
            [leftAmount, 'Get', '#2697C9'],
            [middleAmount, 'Neutral', '#E7E7E7'],
            [rightAmount, 'Don\'t Get', '#EB5830']
        );

        $('.divGraph').jqBarGraph({ data: arrayOfData }); 
    }
于 2012-08-03T23:08:38.670 回答