如果使用相同的数据,在JavaScript中声明多个变量?

时间:2012-11-20 18:27:38

标签: javascript jquery

我看过像Declaring Multiple Variables in JavaScript这样的帖子专注于唯一的变量(以及很多变量),但我看的是很多非独特的变量,例如我想做更大的版本。 ..

            var rep;
            var state_def, state_MA, state_WY, state_TN = 'joeblow';
            var state_AZ, state_TX = 'moefoe';
            var state_MT, state_OR = 'growmo';
            var state_OK, state_LA = 'billyjoe';
            var state_WA, state_NM, state_MS = 'messytess';
            var state_VA, state_NY = 'slickrick';
            var state_CA = 'icecube';

            //or
            var state_def = state_MA = state_WY = state_TN = 'joeblow';

只是要理解,我正在使用这样的开关......

switch (capitalise(data.regionName)) {
                case 'Arizona': rep = state_AZ; break;
                case 'Texas': rep = state_TX; break;
                case 'Montana': rep = state_MT; break;
                case 'Oregon': rep = state_OR; break;
                case 'New Mexico': rep = state_NM; break;
                case 'Mississippi': rep = state_MS; break;
                case 'Oklahoma': rep = state_OK; break;
                case 'Louisiana': rep = state_LA; break;
                case 'Washington': rep = state_WA; break;
                case 'Massachusetts': rep = state_MA; break;
                case 'Wyoming': rep = state_WY; break;
                case 'Tennessee': rep = state_TN; break;
                case 'Virginia': rep = state_VA; break;
                case 'Illinois': rep = state_IL; break;
                case 'Nevada': rep = state_NV; break;
                default: rep = state_def; break;
            };

这也有几千个zipcodes,所以这是一个辅助开关。这就是为什么需要声明状态(或zip)变量/用户关联尽可能短的原因。但我也不想陷入任何我可能不知道的陷阱。这个现在正常工作,但default: rep = state_def; break;返回为undefined除外。此外,在IE8中不起作用。

1 个答案:

答案 0 :(得分:4)

我建议您使用映射替换switch

var reps = {
    'Arizona': state_AZ,
    'Texas': state_TX,
    // etc.
};

// then you can do this:
var rep = reps[capitalize(data.regionName)];

稍后,您甚至可以将该映射(包括值)作为JSON对象从服务器或其他数据源下载。

另请注意,大多数state_*变量未定义。我不知道这是不是你的意图。如果您只有某些状态的数据,那么直接构建数据结构可能更好:

var reps = {
    'Arizona': undefined, // or just omit from mapping
    'Texas': 'moefoe',
    // etc.
};

并免除所有state_*个变量。